前言
本文关于如何使用socket 进行图片的传输
开始
1)客户端
- 先将需要传输的图片转化为文件流:
files=open("C:/Users/Desktop/机器人.jpg",'rb')
- 然后建立socket 连接:
# 创建一个socket
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接
s.connect(('www.xxx.com',8008))
- 通过将文件流转化为适合传输的大小的字节数据:
data= files.read(1024)
- 发送:
s.send(data)
- 关闭连接:
files.close()
s.close()
完整代码如下:
# --coding:utf-8--import socket
files=open("C:/Users/Desktop/机器人.jpg",'rb')# 创建一个socket
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接
s.connect(('www.xxx.com',8008))while(True):
data= files.read(1024)ifnot data:break
s.send(data)
files.close()
s.close()
2)服务端
- 开启端口监听:
# 建立Socket
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1',8008))
- 对需要将接收数据保存下来后所存储的文件路径转化为文件流:
files=open("ROBOT.jpg",'wb')
- 按照某一适合接收的大小接收数据并写入图片路径:
whileTrue:# 指定最大接收量
data= sock.recv(1024)
files.write(data)ifnot data:break
- 关闭连接:
files.close()# 关闭Socket
sock.close()
完整代码如下:
#coding:utf-8import socketimport threading# 建立Socket
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1',8008))
files=open("ROBOT.jpg",'wb')# 开始监听端口,最多同时建立5个连接
s.listen(5)print('Waiting for connection...')deftcplink(sock, addr):print('Accept new connection from %s:%s...'% addr)# 发送数据
sock.send(b'Welcome!')# 接收数据whileTrue:# 指定最大接收量
data= sock.recv(1024)
files.write(data)ifnot data:break
files.close()# 关闭Socket
sock.close()print('Connection from %s:%s closed.'% addr)# 等待连接whileTrue:
sock, addr= s.accept()# 建立新进程
t= threading.Thread(target=tcplink, args=(sock, addr))
t.start()