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()

 

posted on 2017-11-24 09:20  43125471  阅读(121)  评论(0编辑  收藏  举报