py网络_TCP通讯笔记

TCP通讯

在网络编程之中,TCP属于面向连接的通讯协议,所以在进行TCP通讯的过程之中其安全性以及稳定性都是最高的,虽然性能会差一些,但是对于当前网络环境来讲主要使用的还是TCP协议居多

TCP程序采用的是一对一的通讯机制实现的网络传输,在TCP程序之中需要首先创建并开启服务端程序,随后客户端依据指定的IP地址和监听端口号进行连接从而实现数据的传输处理

在Python里面提供有一个socket.socket类可以实现TCP的程序编写,该类之中提供的常用方法有:

No. 函数 类型 描述
1 socket() 构造 获取socket类对象
2 bind(hostname,port) 方法 在指定主机的端口绑定监听
3 listen() 方法 在绑定端口上开启监听
4 accept() 方法 等待客户端连接,连接后返回客户端地址
5 send(data) 方法 发送数据
6 recv(buffer) 方法 接收数据
7 close() 方法 关闭套接字连接
8 connect(hostname,port) 方法 设置要连接的主机名称和端口号

Socket编程实现

在整个的socket通讯过程之中,由于其属于C/S程序结构,所以一定要开发两套程序,对于服务端程序来讲一定要在特定的主机端口上开启监听机制,这样客户端就可以依据服务器的地址和端口进行服务的访问。

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding : UTF-8
import socket
SERVER_HOST = "localhost" # 127.0.0.1(本机IP)
SERVER_PORT = 8080 # 服务绑定端口
def main(): # 主函数
# socket网络服务在每一次处理完成之后一定要使用close()方法进行关闭,所以可利用with结构进行定义
with socket.socket() as server_socket: # 创建了一个服务端的Socket
server_socket.bind((SERVER_HOST,SERVER_PORT)) # 绑定本机的8080端口
server_socket.listen() # 开启监听
print("[服务端]服务器启动完毕,在“%s”端口上监听,等待客户端连接...." % SERVER_PORT)
# 当有客户端连接之后,那么会解除当前的阻塞状态,同时也可以获得客户端的Socket和地址
client_conn,address = server_socket.accept() # 进入到阻塞状态
with client_conn: # 对客户端的请求进行处理
print("[服务端]客户端连接到服务器端,客户端的地址为:%s、连接端口: %s" % address)
client_conn.send("你好:欢迎访问服务器端 www.domain.cn".encode("UTF-8")) # 向客户端进行请求响应
if __name__ == "__main__": # 判断程序执行名称
main() # 调用主函数

对于此时的socket程序由于其是标准的TCP协议实现,所以可以直接使用telnet命令进行访问。

D:\Program_software_list\Anaconda3_5\python.exe F:/Learn/Python/网络编程/TCP_server1.py
[服务端]服务器启动完毕,在“8080”端口上监听,等待客户端连接….

[服务端]客户端连接到服务器端,客户端的地址为:127.0.0.1、连接端口: 15245

进程已结束,退出代码0

对于当前的服务器端由于只是向客户端进行一次的响应操作,所以使用telnet连接之后,那么服务器端进行数据传输后就会自动的进行关闭了,但是telnet本身是属于操作系统里面提供的一个测试命令,并不能作为实际的程序客户端使用,那么就需要开发自己的Socket客户端(TCP协议)。

开发客户端程序

使用python的程序运行代替telnet命令

1
2
3
4
5
6
7
8
9
10
# coding : UTF-8
import socket
SERVER_HOST = "127.0.0.1" # 网络服务器的主机名称或IP地址
SERVER_PORT = 8080 # 服务器连接端口
def main(): # 主函数
with socket.socket() as client_socket: # 建立客户端Socket
client_socket.connect((SERVER_HOST,SERVER_PORT)) # 连接服务端
print("服务器端响应数据:%s" % client_socket.recv(60).decode("UTF-8"))
if __name__ == "__main__":
main() # 调用主函数

server:

1
2
3
4
[服务端]服务器启动完毕,在“8080”端口上监听,等待客户端连接....
[服务端]客户端连接到服务器端,客户端的地址为:127.0.0.1、连接端口: 16335

进程已结束,退出代码0

client:

1
2
3
服务器端响应数据:你好:欢迎访问服务器端 www.domain.cn

进程已结束,退出代码0

在整个的Socket网络编程之中基本的核心流程就是服务端开启监听端口,等待客户端连接,而客户端要想访问服务器就必须进行服务器的地址连接,而后进行相应的数据的请求和响应内容的接收。


py网络_TCP通讯笔记
https://blog.wangxk.cc/2020/02/05/py网络-TCP通讯笔记/
作者
Mike
发布于
2020年2月5日
许可协议