流程图
面向连接的套接字
面向连接的通信提供序列化的、可靠的和不重复的数据交付,而没有记录边界。主要的协议是传输控制协议(TCP);
TCP套接字,在python中,必须使用SOCK_STREAM作为套接字类型
tcp的特点
- 面向连接
通过双方必须先建立好连接才能进行数据的传输 - 可靠传输
TCP采用发送应答机制
超时重传
错误校验
流量控制和阻塞管理
python 中客户端例子
import socket'''
在 Python 中,if __name__ == '__main__': 是一个常见的结构,用于确保某些代码只有在直接运行这个模块时才会被执行,而在这个模块被作为导入的模块时不会被执行'''
if __name__ == '__main__':'''创建tcp 客服端套接字'''tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_client_socket.connect(("10.211.55.6",9090))send_content = "hello,world,您好"send_data = send_content.encode("gbk")tcp_client_socket.send(send_data)
python 中服务端例子
可以支持多客户端模式
import socket
import threadingdef handler_client_request(client_socket,ip_port):recv_data = client_socket.recv(1024)if recv_data:print(recv_data.decode('utf-8'))send_content = "测试"client_socket.send(send_content.encode('utf-8'))else:print("客服端下线",ip_port)client_socket.close()if __name__ == '__main__':tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)tcp_socket.bind(("",9090))# 128 表示最大等待建立链接的个数tcp_socket.listen(128)while True:new_client,ip_port = tcp_socket.accept()sub_thread = threading.Thread(target=handler_client_request, args=(new_client,ip_port))sub_thread.start()tcp_socket.close()