socket就是一个模块,服务器
1 import socket 2 sk = socket.socket() 3 sk.bind(('127.0.0.1',9999,)) 4 sk.listen(5) 5 while True: 6 conn,address = sk.accept() 7 conn.sendall(bytes("welcome",encoding="utf-8")) 8 while True: 9 ret_bytes = conn.recv(1024) 10 ret_str = str(ret_bytes,encoding='utf-8') 11 print(ret_str) 12 if ret_str == 'q': 13 break 14 conn.sendall(bytes((ret_str+"好"),encoding="utf-8"))#发送文件python3.5需要转换成字节再发送,面pyhton2.7不需要直接发送 15 print(address,conn)
客户端
1 #!/usr/bin/env python3 2 import socket 3 obj = socket.socket() 4 obj.connect(("127.0.0.1",9999)) 5 ret_bytes = obj.recv(1024) 6 ret_str = str(ret_bytes,encoding='utf-8') 7 print(ret_str) 8 while True: 9 inp = input("please input your text:") 10 11 if inp == 'q': 12 obj.sendall(bytes(inp,encoding="utf-8")) 13 break 14 else: 15 obj.sendall(bytes(inp,encoding='utf-8')) 16 ret = str(obj.recv(1024),encoding="utf-8") 17 print(ret) 18 19 obj.close()
常用的发送sednall ,连接connect,接收recv
上传文件到服务器
服务端
1 #!/usr/bin/env python3 2 import socket 3 sk = socket.socket() 4 sk.bind(('127.0.0.1',9999,)) 5 sk.listen(5) 6 7 while True: 8 conn,address = sk.accept() 9 conn.sendall(bytes("welcome",encoding="utf-8")) 10 #接收文件大小 11 file_size = str(conn.recv(1024),encoding="utf-8") 12 print(file_size) 13 #收到文件大小之后发送一个确认包 14 conn.sendall(bytes("ack",encoding='utf-8')) 15 total_size = int(file_size) 16 has_recv = 0 17 f = open('456.jpg','wb') 18 while True: 19 if total_size == has_recv: 20 break 21 data = conn.recv(1024) 22 f.write(data) 23 has_recv +=len(data) 24 f.close
客户端
1 import socket 2 import os 3 obj = socket.socket() 4 obj.connect(("127.0.0.1",9999)) 5 ret_bytes = obj.recv(1024) 6 ret_str = str(ret_bytes,encoding='utf-8') 7 print(ret_str) 8 9 #发送当前文件大小 10 ret = os.stat('123.jpg').st_size 11 obj.sendall(bytes(str(ret),encoding="utf-8")) 12 #接收确认包解决粘包问题 13 obj.recv(1024) 14 #发送文件 15 with open('123.jpg','rb') as f: 16 for line in f: 17 obj.sendall(line) 18 obj.close()