2013-05-04 2 views
2

다음 두 개의 클라이언트 및 서버 파이썬 스크립트를 작성했습니다. 서버는 클라이언트가 파일을 수신하도록 청취하는 것이고, 파일을 수신하기위한 서버 코드입니다. 코드 문제 파일 데이터에서 파일 이름을 분리 할 수 ​​없습니다. 다음 출력은 당신이 일을 얻기 위해 TCP/IP의 상단에 자신의 간단한 프로토콜을 만들어야합니다 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

+0

@aya 코드 –

+0

을 파일의 나머지 부분과 어떻게 분리할까요? 널 바이트는 아마 트릭을 할 것입니다 ... – mata

답변

4

을 받게됩니다. 가장 단순한 것은 파일 이름과 파일 내용 사이에 특수 문자 (예 : 0x00)를 추가하는 것입니다. 수신 사이트에서이 문자를 감지하고 파일 이름과 파일 내용을 분리 할 수 ​​있습니다.

더 복잡한 프로토콜은 파일 크기를 전송할 수 있으므로 수신 사이트에서 전송이 끝났을 때와 모든 바이트가 전송 된 것을 감지 할 수 있습니다. 수신자가 전체 파일을 받았음을 알리는 메시지를 보낸 사람에게 보내는 것이 좋습니다.

전송 파일 프로토콜 (TFTP, FTP)이 많이 있으며 그 이유는 정상적인 프로토콜이없는 순수한 TCP/IP가 쓸모 없기 때문입니다.

관련 문제