TCP 通信协议是面向连接的可靠的网络通信协议.
网络间想要进行数据传输必须要用到 socket.
- # 1. 导入模块
- import socket
- if __name__ == '__main__':
- # 2. 创建 tcp 服务端套接字
- # 2.1 AF_INET 表示 ipv4 的地址类型, AF_INET6: 表示 ipv6 的地址类型
- # 2.2 SOCK_STREAM 表示 tcp 协议, SOCK_DGRAM 表示 udp 协议
- tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # 3. 绑定端口号
- # ("服务器的 ip 地址", 8000), 服务器的 ip 地址一般不需要指定, 本机的任意一个 ip 都可以
- # 设置端口号复用, 保证服务端程序退出端口号立即释放
- # 1. SOL_SOCKET 表示当前套接字
- # 2. SO_REUSEADDR 表示端口号复用选项
- # 3. True: 表示开启端口号复用选项
- tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
- tcp_server_socket.bind(("", 9000))
- # 4. 设置监听
- # 128: 表示最大等待的连接数, 这是在单任务的情况下.
- tcp_server_socket.listen(128)
- # 5. 等待接受客户端的连接请求
- new_socket, ip_port = tcp_server_socket.accept()
- print("连接建立成功:", ip_port)
- # 代码执行到此, 说明连接建立成功, 如果没有客户端和服务端建立连接, 代码会阻塞到 accept 方法这个地方
- # 6. 接收数据, recv 会阻塞, 也就是说等着接收客户端发送的数据, 收到客户端的数据解阻塞
- recv_data = new_socket.recv(1024)
- print("数据长度为:", len(recv_data))
- # 对字节数据进行解码
- recv_content = recv_data.decode("utf-8")
- print("接收客户端的数据为:", recv_content, ip_port)
- # 7. 发送数据
- send_content = "您好, 问题正在处理中..."
- # 对字符串进行编码转成字节
- send_data = send_content.encode("utf-8")
- new_socket.send(send_data)
- # 8. 关闭连接
- # 和客户端通信完毕
- new_socket.close()
- # 停止建立连接的服务
- tcp_server_socket.close()
来源: http://www.bubuko.com/infodetail-3320982.html