创建一个超级简单TCP交互的服务器/客户端
创建客户端代码:
# cs = socket() # 创建服务端套接字 # cs.connect() # 尝试连接服务器 # comm_loop: # 循环通信 # cs.send() / c.recv() # 对话(发送和接收) # cs.close() # 关闭服务端套接字 # 创建一个TCP客户端, 程序会提示用户输入要传给服务器的信息, 显示服务器返回的加了时间戳的结果 from socket import * # HOST 和 PORT 表示服务器的主机名与端口号, 由于这里是在一台电脑运行, 所以 HOST 里放的是 localhost # 如果服务器和客户端不在一台电脑上, HOST要做出相应的修改 # 端口号和服务器的设置完全相同 HOST = 'localhost' # HOST 变量为空, 表示 bind() 函数可以绑定到所有的有效地址上 PORT = 21567 # 设置端口号 BUFSIZ = 1024 # 设置缓冲区大小为1K ADDR = (HOST, PORT) tcp_cli_sock = socket(AF_INET, SOCK_STREAM) tcp_cli_sock.connect(ADDR) while True: data = input('>>>>>>请输入内容: ') if not data: break tcp_cli_sock.send(data.encode()) data = tcp_cli_sock.recv(BUFSIZ) if not data: break print(f'>>>>>客户端data: {data}') tcp_cli_sock.close()
创建服务器代码:
from socket import * from time import ctime HOST = '' # HOST 变量为空, 表示 bind() 函数可以绑定到所有的有效地址上 PORT = 21567 # 设置端口号 BUFSIZ = 1024 # 设置缓冲区大小为1K ADDR = (HOST, PORT) tcp_ser_sock = socket(AF_INET, SOCK_STREAM) # 生成TCP服务套接字, 并绑定到服务器低智商 tcp_ser_sock.bind(ADDR) # 把地址绑定套套接字上 tcp_ser_sock.listen(5) # 监听连接, 表示最多允许多少个连接同时连进来,后面的连接会被拒绝掉 # 在服务器进入无限循环后,被动的等待连接的到来。当有连接时, 进入对话循环, 等待客户端发送数据。 # 如果消息为空, 表示客户端已退出,那就再去等待下一个客户端连接 while True: # 无限循环 print('等待创建......') tcp_cli_sock, addr = tcp_ser_sock.accept() # 接收客户端连接 print(f'......创建地址: {addr}') while True: # 通信循环 # rece() / send(): 对话的接收和发送 data = tcp_cli_sock.recv(BUFSIZ) # 对话接收 if not data: break # send() 方法python2中入参类型是str, python3中是bytes, 使用encode()/decode()转化 tcp_cli_sock.send(f'[{ctime()}] {data}'.encode()) # 对话发送 # tcp_cli_sock.close() # 关闭客户端套接字 # 这行不会被执行到, 用来提醒服务器退出时要调用close() tcp_ser_sock.close() # 关闭服务端套接字
客户端运行结果
服务器运行结果