2012-09-26 23 views
1

我試圖從客戶端向帶有套接字的服務器發送多個圖像文件。 我的問題是我無法獲得stoppbit(或word)的工作。使用stoppbit的Python套接字

客戶端:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("server",port)) 
#grab image ... 
s.send(imagedata) 
s.send("#FINISH#") 
s.close() 

服務器:

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
s.bind(("",port)) 
s.listen(1) 

c,a = s.accept() 

while True: 
    imagedata = c.recv(1024) 

    if not imagedata or "#FINISH#" in imagedata: 
     komm.close() 
     break 

    image = image + imagedata 


s.close() 
#remove stoppword and save image ... 

這只是一個簡單的例子,但你可以看到這個問題。我無法獲取「#FINISH#」,因爲第二次發送(客戶端)將字符串(有時)附加到圖像數據。我知道這是因爲recv的bufsize。我應該怎麼做?

+0

在開始編碼之前,你必須實際設計一個協議。協議應規定接收方如何識別數據的各個部分在哪裏。 –

+0

TCP或您的代碼中沒有「停止位」。不是一個真正的問題。 – EJP

回答

1

不要發送「停止位」,而是先發送固定長度字段中的數據長度。

0

如果您確實想這樣做,請檢查您收到的完整數據中的「停止位」,即 "#FINISH#" == image[-len("#FINISH#"):]