gpt4 book ai didi

Python 套接字 Recv 无法正常工作有人可以解释

转载 作者:太空宇宙 更新时间:2023-11-03 13:22:59 24 4
gpt4 key购买 nike

我正在尝试为我的命令行服务器创建一个图形用户界面客户端。但是,我遇到了一些我似乎无法解决的恼人问题。

我不是 100% 确定实际问题是什么,因为有时代码可以工作,有时则不能。我认为主要问题是最初我尝试了

while 1:
self.data = s.recv(1024)
if not self.data():
break
else:
print self.data()

然后我用这个发送给它

  for f in files:
s.send(f)

每个 f 都是一个文件名字符串。我预计它会在 recv 端出现,因为每个 recv 调用都会收到一个文件名,但在一次 recv 调用中我得到了一大块文件名,我假设有 1024 个字符值

这使得无法检查数据的结尾,因此循环永远不会退出。

这是我现在的代码

def get_data(self,size = 1024):

self.alldata = ""
while 1:

while gtk.events_pending():
gtk.main_iteration()

self.recvdata = self.s.recv(size)
self.alldata += self.recvdata
if self.alldata.find("\r\n\r\nEOF"):
print "recieved end message"
self.rdata = self.alldata[:self.alldata.find("\r\n\r\nEOF")]
break



print "All data Recieved: " + str(len(self.rdata)) + "Bytes"
print "All data :\n" + self.rdata + "\n-------------------------------------------------"

self.infiles = self.rdata.split("-EOS-")
for nf in self.infiles:
if len(nf) > 2:
self.add_message(self.incomingIcon,nf)

此刻我正试图让客户端从服务器正确读取。我想要发生的是当输入命令列表并将其发送到客户端时,服务器发回数据并将每个文件附加到列表存储中

有时这工作正常,其他时候只有 1200 个文件中的一个被返回,如果它执行正常,如果我尝试键入另一个命令并发送它,整个 gtk 窗口会变暗并且程序变得无响应。

抱歉,我无法更好地解释这个问题,我尝试了很多不同的解决方案,所有这些解决方案都会给出不同的错误。

如果有人可以解释 recv 命令以及为什么它可能会出错,这就是我向客户端发送数据的方式

if(commands[0] == 'list'):
whatpacketshouldlooklike=""
print "[Request] List files ", address
fil = list_files(path)
for f in fil:
sdata = f
whatpacketshouldlooklike += sdata + "-EOS-"
newSock.send(sdata +"-EOS-")
#print "sent: " + sdata
newSock.send("\r\n\r\nEOF")
whatpacketshouldlooklike += "\r\n\r\nEOF"
print "---------------------------------"
print whatpacketshouldlooklike
print "---------------------------------"

最佳答案

您在第一部分遇到的问题是套接字是基于流而不是基于消息的。您需要想出一个消息抽象以在流之上分层。这样,管道的另一端就知道发生了什么(作为一个命令的一部分预期有多少数据),而不是猜测应该发生什么。

关于Python 套接字 Recv 无法正常工作有人可以解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com