TCP通信协议是面向连接的可靠的网络通信协议。
网络间想要进行数据传输必须要用到socket,socket翻译过来叫做套接字,其主要作用是不同设备或同一台设备之间的进程通信工具。
Python中的Tcp协议应用如下:
我们都知道Tcp是面相连接通信协议,所以Tcp服务端需要结合网络调试助手进行接受及测试数据传输。
Python中使用Socket的流程:
1.导入socket模块
2.创建socket对象
3.设置端口复用,主要用来解决结束服务端程序后的端口占用问题。
4.绑定端口
5.设置监听
6.等待服务端连接,当客户端与服务端连接成功后会返回一个新的socket,使用新的socket来进行通信。
7.接收数据
8.发送数据
9.关闭socket套接字,注意服务端套接字不要轻易关闭,一旦关闭,表示服务端不再提供服务。
1 # 1. 导入模块 2 import socket 3 4 if __name__ == '__main__': 5 # 2. 创建tcp服务端套接字 6 # 2.1 AF_INET 表示ipv4的地址类型, AF_INET6: 表示ipv6的地址类型 7 # 2.2 SOCK_STREAM 表示tcp协议, SOCK_DGRAM 表示udp协议 8 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 9 # 3. 绑定端口号 10 # ("服务器的ip地址", 8000), 服务器的ip地址一般不需要指定,本机的任意一个ip都可以 11 # 设置端口号复用,保证服务端程序退出端口号立即释放 12 # 1. SOL_SOCKET 表示当前套接字 13 # 2. SO_REUSEADDR 表示端口号复用选项 14 # 3. True: 表示开启端口号复用选项 15 tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) 16 tcp_server_socket.bind(("", 9000)) 17 # 4. 设置监听 18 # 128: 表示最大等待的连接数, 这是在单任务的情况下。 19 tcp_server_socket.listen(128) 20 # 5. 等待接受客户端的连接请求 21 new_socket, ip_port = tcp_server_socket.accept() 22 print("连接建立成功:", ip_port) 23 # 代码执行到此,说明连接建立成功,如果没有客户端和服务端建立连接,代码会阻塞到accept方法这个地方 24 # 6. 接收数据, recv 会阻塞,也就是说等着接收客户端发送的数据,收到客户端的数据解阻塞 25 recv_data = new_socket.recv(1024) 26 print("数据长度为:", len(recv_data)) 27 # 对字节数据进行解码 28 recv_content = recv_data.decode("utf-8") 29 print("接收客户端的数据为:", recv_content, ip_port) 30 31 # 7. 发送数据 32 send_content = "您好,问题正在处理中..." 33 # 对字符串进行编码转成字节 34 send_data = send_content.encode("utf-8") 35 new_socket.send(send_data) 36 37 # 8. 关闭连接 38 # 和客户端通信完毕 39 new_socket.close() 40 # 停止建立连接的服务 41 tcp_server_socket.close()