项目没有用到,没做深入学习,不想多做注解了。代码没得问题
服务端代码:
import socket,struct
from PIL import Image
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server_address = ('localhost', 9999)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
# 等待C++连接并接收数据
print('等待客户端连接...')
# 接受C++连接
client_socket, client_address = server_socket.accept()
fileinfo_size = struct.calcsize('128sq') #计算给定的格式(fmt)占用多少字节的内存
print('客户端已连接:', client_address)
while True:
# print('等待客户端连接...')
# # 接受C++连接
# client_socket, client_address = server_socket.accept()
# fileinfo_size = struct.calcsize('128sq')
# print('客户端已连接:', client_address)
try:
data= client_socket.recv(fileinfo_size)
if data:
# 将接收到的数据流转换为图像
filename, filesize = struct.unpack('128sq', data) #将外部压缩的格式字符串进行解压,返回一个数组
fn = filename.decode().strip('\x00')
print(fn)
result=Detect().infer_image(fn)
client_socket.send(str(result).encode()) #数据要保证不是list,不然会报错
else:
# C++断开连接
print('客户端已断开连接:', client_address)
break
except Exception as e:
print('发生错误:', str(e))
break
# 关闭C++连接
client_socket.close()
# 关闭服务端socket
server_socket.close()
客户端:
import socket,threading
import struct,os
class Client:
def __init__(self):
# 创建socket对象
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
self.server_address = ('127.0.0.1', 9999)
self.client_socket.connect(self.server_address)
self.fileinfo_size = struct.calcsize('128sq')
# # 创建一个线程来接收服务器发送的数据
# t = threading.Thread(target=self.Receive)
# t.start()
while True:
message = 'D:/project/yolov5-6.0/data/images/car.jpg'
# fileinfo_size = struct.calcsize('128sq')
# 定义文件头信息,包含文件名和文件大小
fhead = struct.pack('128sq', bytes(message.encode('utf-8')), os.stat(message).st_size)
print(fhead)
self.client_socket.send(fhead)
response = self.client_socket.recv(1024)
print('服务端回复:', response.decode())
# def Receive(self):
# while True:
# # 接收服务端回复的数据
# response = self.client_socket.recv(1024)
# print('服务端回复:', response.decode())
if __name__=="__main__":
client = Client()