流程图
面向连接的套接字
面向连接的通信提供序列化的、可靠的和不重复的数据交付,而没有记录边界。主要的协议是传输控制协议(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 threading
def 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()