def sendFile(self,filePath):
try:
f = open(filePath, 'rb')
print 'file opened'
for soc in self.allClients.keys():
try:
f = open(filePath, 'rb')
except:
print "File does not exist"
print 'Sending File: ' + filePath
l = f.read(1024)
while (l):
print 'Sending...'
soc.send(l)
l = f.read(1024)
soc.send('end')
f.close()
print 'File sent'
except:
print "File does not exist"
def receiveFile(self, ext, clientsoc):
f = open('receivedFile' + ext,'wb')
print "Receiving File..."
l = clientsoc.recv(1024)
while(l):
print "Receiving..."
if (l is not 'end'):
f.write(l)
print l + '\n'
l = clientsoc.recv(1024)
else:
break
f.close()
print "Received Fileeeeeooooo"
更奇怪的是,当我在对等程序之外使用它时,这段代码仍然有效。任何帮助都将非常感谢,我已经为这件事挣扎了两天了。
首先,不能将字符串与是
或不是
进行比较:
>>> a = "he"
>>> a + "llo" is "hello"
False
第二,TCP是一种流协议。recv
最多为1024个字节,但可能更少,如果您从服务器发送两个字节,则可以将它们合并为一个recv
。因此L
不可能是“end”
而是“文件结尾的最后一个字节”。并且如果检查“end”
,则文件中不允许有“end”
。最好的解决方案是首先发送文件的长度,然后发送和recvlengts
字节。
ps:您可能希望在服务器端使用sendall
。
如果我不关闭套接字: 客户端没有输出。服务器从不发送消息,或者客户端从不接收消息。 有人知道发生这种情况的可能原因吗?客户端使用一个线程接收消息,一个线程发送消息。客户端套接字在主客户端线程中创建,因此接收者和发送者线程使用当前套接字进行通信。 提前谢了。
请参阅下面的代码: 当程序启动时,我使用telnet连接localhost:8888,3秒后,服务器会杀死我,但当我使用netstat观看时,套接字状态仍然是ESTABLISHED。如果我删除了File()函数,套接字可以正常关闭。我怎样才能解决这个问题?
我正在建立一个应用程序,用户将把他们的测试和作业和任何东西。我想知道我的应用程序是否有可能在测试前一周和一天发出通知? 我看到的到处都是firebase通知和push通知。 我不想要这些在线通知,我将需要应用程序发送他们自己离线。这可能吗?
我使用来管理服务器端的套接字连接。如果服务器(tomcat)关闭,我如何确保任何活动的套接字连接被正确终止? 有好心的听众吗?或任何可以防止服务器关闭的拦截器,例如,如果在关闭期间有任何打开的套接字,则最多60秒;但同时关闭套接字,在关机期间不接受任何连接?
我正在编写一个简单的文件客户端-服务器通信来使用TCP传输文件。我想使用python套接字编程来实现它的代码。我遵循这个例子。我想知道是否有可能控制数据包丢失和重传。例如,当数据包丢失时,我可以发送零字节大小的丢失,而不是重传实际丢失的段吗?
我想关闭/终止/扔掉一个由一行代码创建的JPanel(因此它被完全终止,而不仅仅是隐藏并在后台作为