目录
服务端向客户端发送消息,客户端回送文件(图片,文档等)
服务端
import socket
import os
import sys
import struct
def socket_service_image():
try:
# 创建一个tcp的socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 用socket选项设置地址重用
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
# 绑定ip,端口号
s.bind(("192.168.8.15", 6666))
# 监听连接请求,最多接受10个连接
s.listen(10)
except socket.error as msg:
print(msg)
# 退出程序
sys.exit()
print("Wait for Connection..........")
while True:
# 接收一个新的连接,并返回一个新的socket对象和客户端地址
sock,addr = s.accept()
# 调用deal_image函数处理图片传输
deal_image(sock,addr)
def deal_image(sock,addr):
print("Accept connection from {0}".format(addr))
while True:
# 计算文件信息的大小
fileinfo_size = struct.calcsize("128sq")
# 接收文件信息数据
buf = sock.recv(fileinfo_size)
if buf:
# 解包文件名和文件大小
filename,filesize = struct.unpack("128sq",buf)
# 解码文件名,并去除末尾的空字符
fn = filename.decode().strip("\00")
# 新的文件名
new_filename = os.path.join("./",
"new_" + fn)
# 接收的文件大小为0
recvd_size = 0
# 以写入模式打开新文件
fp = open(new_filename,"wb")
while not recvd_size == filesize:
if filesize - recvd_size > 1024:
# 最多可以接收1024字节的文件数据
data = sock.recv(1024)
# 更新已接收的文件大小