python学习日志--day8

xiaoxiao2021-02-27  230

一、python网络编程

1、基于TCP客户/服务器程序的套接字函数

2、服务器端编程步骤:

第一步,socket.socket(socket.AF_INET,socket.SOCK_STREAM)第二步,绑定地址   使用listen方法进行监听状态循环监听状态 #服务器端 import socket server = socket.socket() server.bind(('localhost',6798)) #绑定要监听端口 server.listen(5) #监听 print("我要开始等电话了") while True: conn, addr = server.accept() # 等电话打进来 # conn就是客户端连过来而在服务器端为其生成的一个连接实例 print(conn, addr) print("电话来了") count = 0 while True: data = conn.recv(1024) print("recv:",data) if not data: print("client has lost...") break conn.send(data.upper()) count+=1 if count >10:break server.close() 输出结果 3、客户端编程步骤: 第一步,创建一个socket对象,以连接服务器端 clientsock  socket.socket(socket.AF_INET,socket.SOCK_STREAM)第二步,连接至服务器端  client.connect(('localhost',6789))第三步,发送请求   client.send() #客户端 import socket client = socket.socket() #声明socket类型,同时生成socket连接对象 client.connect(('localhost',6798)) while True: msg = input(">>:").strip() if len(msg) == 0:continue client.send(msg.encode("utf-8")) data = client.recv(10240) print("recv:",data.decode()) client.close() 输出结果 socket tcp/ip send, recv udp family address AF.INET ipv4 AF.INET6 AF.UNIX 。local socket protocol type sock.SOCK_STREAM tcp/ip socket.SOCK_DGRAM   数据报式socket , for UDP 服务端 server = socket.socket(AF.INET,sock.SOCK_STREAM) server.bind(localhost,9999) server.listen() while True: conn,addr = server.accept() #阻塞 while True: print("new conn",addr) data = conn.recv(1024) #8192 #recv默认是阻塞的 if not data: break #客户端已断开, conn.recv收到的就都是空数据, print(data) conn.send(data.upper()) client client = socket.socket() client.connect(serverip, 9999 ) client.send(data) client.send(data) client.recv(dat) 4、socket 粘包 5、socketserver 多并发实现 import socketserver class MyTCPHandler(socketserver.BaseRequestHandler): def handle(self): while True: try: self.data = self.request.recv(1024).strip() print("{} wrote:".format(self.client_address[0])) print(self.data) self.request.send(self.data.upper()) except ConnectionResetError as e: print("err",e) break if __name__ == "__main__": HOST, PORT = "localhost", 9999 # Create the server, binding to localhost on port 9999 server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) server.serve_forever() import socket client = socket.socket() #client.connect(('192.168.16.200',9999)) client.connect(('localhost',9999)) while True: cmd = input(">>:").strip() if len(cmd) == 0: continue client.send(cmd.encode("utf-8")) cmd_res_size = client.recv(1024) ##接受命令结果的长度 print("命令结果大小:",cmd_res_size) received_size = 0 received_data = b'' while received_size < int(cmd_res_size.decode()) : data = client.recv(1024) received_size += len(data) #每次收到的有可能小于1024,所以必须用len判断 #print(data.decode()) received_data += data else: print("cmd res receive done...",received_size) print(received_data.decode()) client.close() 输出结果

转载请注明原文地址: https://www.6miu.com/read-11026.html

最新回复(0)