问题描述
这是我的代码,用于从客户端VMware(或笔记本电脑)接收数据。 它处理接收到的图像数据,并将结果值发送回客户端。它只适用于少数几个客户,因为它一次只交易一个。因此,我想修改代码以接收数据并使用独立的线程处理数据,每个线程一个专用线程。
但是问题是线程和主进程似乎共享相同的东西。我为线程和主进程分配了不同的端口号,但是当主进程与客户机连接时,线程不能接受来自客户机的连接,而当线程与客户机连接时,主进程也不能接受连接。 它们不仅不能接受连接,而且共享相同的队列,这会使recv(16)和recv(1024)函数出错。
我最终想要的是,我的主进程不执行任何操作或执行其他操作(通信除外),只有线程与客户端通信一起工作。
import socket
serverSock = socket.socket(socket.AF_INET,socket.soCK_STREAM)
serverSock.bind(("",someport_no))
serverSock.listen(3)
count = 0
while 1:
print("Waiting for connection ...")
client,addr = serverSock.accept()
print("Connection established")
recvData = client.recv(16) #Receives file size
fileSize = int().from_bytes(recvData,"little") #Decoding file size
print("The file size : ",fileSize)
totalRecv = bytes() #Convert totalRecv variable's data type to bytes object
recvCount = bytes()
while True:
recvData = client.recv(1024)# Puts the data received from the client 1024kb each.
totalRecv += recvData # Stacks received data into totalRecv
if len(totalRecv) == fileSize:#Ends receiving when the size matches.
break
with open(dir + "rune_client.png","wb") as f:
f.write(totalRecv)
# client,addr = serverSock.accept()
print("Image analizing...")
first = time.perf_counter()
result = detects() # processes the image
client.send(result.encode("utf-8"))
second = time.perf_counter()
print('Detect time : ',second - first)
count += 1
print('Server access count : ',count)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)