2013-05-04 56 views
2

我写了两个客户端和服务器python脚本服务器正在侦听客户端发送文件以下是我的服务器代码,用于侦听文件。代码的问题我不能将文件名与文件数据分开。下面的输出接收data.txtMyNamePython套接字(如何从文件内容中分离FileName)

def sendFileName(self): 
     self.clientsocket.send("name:" + self.filename) 
     print 'filename', self.filename 

    def sendFile(self): 

     f=open(self.filename,"rb") 
     data= f.read(1024) 
     while (data): 
      if(self.clientsocket.send(data)): 
      print "sending data" 
      data = f.read(1024) 
      #readByte = open(self.filename, "rb") 
      #data = readByte.read() 
      #readByte.close() 
      #self.gateway.send(data) 
     self.clientsocket.close() 
     f.close 


    def receiveFile(self,sock): 
      data = sock.recv(1024) 
      print 'filename', data.strip() 
      f = open(data.strip(), "wb") 
      data = sock.recv(1024) 
      while (data): 
       f.write(data) 
       data=sock.recv(1024) 
      f.close() 
      self.server_socket.close() 
+0

您还需要包含发送文件的代码。 – Aya 2013-05-04 20:41:28

+0

@aya我已经包含代码 – 2013-05-04 20:46:51

+0

你怎么样分开文件名与文件的其余部分?一个空字节可能会诀窍... – mata 2013-05-04 20:48:11

回答

4

你必须创建在TCP/IP之上自己的简单协议来得到它的工作。我想象的最简单的方法是在文件名和文件内容之间添加一个特殊字符(例如0x00)。接收站点可​​以检测到这个字符并分割文件名和文件内容。

更复杂的协议也可以发送文件大小,因此接收站点可​​以检测传输何时终止,以及是否发送了所有字节。 将发送确认消息发送给发件人接收者获得整个文件也是很好的。

有很多传输文件协议(TFTP,FTP),它们的存在是有原因的,因为纯粹的没有任何协议的TCP/IP是无用的。