2010-10-02 46 views
-3

我在python中建立了一個TCP客戶端服務器連接,服務器向客戶端發送代碼,客戶端評估發送的代碼。代碼從服務器中的文件發送。雖然runnig的代碼,它有時工作正常,但有時客戶端代碼不工作..它卡住了..是否有一些網絡連接或端口的問題?但是,如果是這樣,在其他時間它是如何工作的?在python中的網絡編程

服務器側發送代碼(從.py文件被讀取)

info = finp.readlines() 
    for line in info: 
     self.channel.send(line) 
    self.channel.send("#p") 

客戶側接收代碼

while b!="#p": 
     b=client.recv(1024) 
     print >>fout, b 
    fout.close() 

    client.close() 

我從在服務器端的文件中讀取數據,將其發送通過網絡並將其存儲到客戶端的另一個.py文件中。這有時可以正常運行,但有時會卡住。

+6

這裏沒有足夠的信息給任何人做出診斷。發佈一些代碼,也許我們可以幫助你。 – 2010-10-02 12:08:43

+0

如果您想在這裏找到有意義且有用的答案,您應該提供更多詳情。完全不知道你遇到什麼樣的代碼問題,什麼樣的網絡連接,服務器做什麼,客戶端是什麼樣子,協議是什麼,等等。 – 2010-10-02 13:16:09

+0

「它卡住了」是什麼意思?究竟在哪裏?怎麼了? – AndiDog 2010-10-03 08:22:16

回答

0

發佈一些代碼來展示你的問題會對確定問題產生奇蹟。

很可能,您對發送和接收做出了假設。通常的回答這個行爲是仔細閱讀文檔:

  • send(這是不能保證發送請求的所有字節,見sendall
  • recv(比你預期它可以接收更多或更少的數據)

請記住,TCP/IP是基於流的協議。沒有消息邊界,因此傳輸的數據必須包括在客戶端和服務器之間遵循一個協議來確定完整消息的大小,例如在消息之前發送消息大小或以唯一值終止消息。

1

嘗試

while !b.endswith("#p"): 
    b = client.recv(1024) 
    print >> fout, b 

becouse在b變量可以是與結尾的字符串#plast line of the file#p

,或者如果你有一些工作人員#p使用後此

while b.find("#p") == -1: 
    ... 

或更好

while True: 
    b = client.recv(1024) 
    if not b: 
     break 
    print >> fout, b 

在這種情況下,您不需要#p標記。