2016-07-20 25 views
0

我試圖發送命令到使用基於python的套接字服務器,其中服務器將獲得各種字符串命令,做一些事情,然後等待下一個命令。python套接字服務器與java客戶端 - socket.error:[錯誤32]損壞的管道

我用Python編寫的一個套接字服務器上的樹莓PI運行:

import socket 

HOST = '' # Symbolic name meaning the local host 
PORT = 11113 # Arbitrary non-privileged port 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print 'Socket created' 
try: 
    s.bind((HOST, PORT)) 
except socket.error , msg: 
    print 'Bind failed. Error code: ' + str(msg[0]) + 'Error message: ' + msg[1] 
    sys.exit() 
print 'Socket bind complete' 


    def listen(): 
     s.listen(1) 
     print 'Socket now listening' 

     # Accept the connection 
     (conn, addr) = s.accept() 
     print 'Server: got connection from client ' + addr[0] + ':' + str(addr[1]) 

     while 1: 
      data = conn.recv(1024) 
      tokens = data.split(' ', 1) 
      command = tokens[0].strip() 

      print command 

      # Send reply 
      conn.send("Ack") 
      break 

     conn.close() 
     # s.close() 
     listen() 
     print "connection closed" 

    listen() 

Java客戶端:

public class Client { 

    public static void main(String... args) throws Exception { 
     int portNum = 11113; 

     Socket socket; 

     socket = new Socket("192.168.1.20", portNum); 


     DataOutputStream dout=new DataOutputStream(socket.getOutputStream()); 
     dout.writeUTF("Hello"); 
     dout.flush(); 
     dout.close(); 
     socket.close(); 


    } 
} 

Python的服務器啓動OK,並等待連接,當我運行客戶端代碼服務器輸出hello文字後跟大量空白,然後

編輯:空白處是while 1 loop ou計算輸入數據,然後循環失控直至崩潰。我想輸出文本並保持更多連接列表。

編輯2:固定python所以它不會崩潰 - 我離開循環,並重新啓動監聽過程 - 哪些工作。如果這個腳本可以改進,請注意 - 它看起來不像是可擴展的。

回答

1

errno.32是:管道中斷(如果 TCP套接字的一端關閉連接(使用斷開連接)或被打死,其他

在你的Java客戶端發生破裂的水管中的錯誤,你送一些數據並馬上關閉這可能會導致結果。我不熟悉java.But這裏有兩件事你需要遵循。

1.remove sock.close()在java客戶端。

2.讓你的java客戶端睡一會兒,但退出。

+0

謝謝 - 我認爲我得到它的工作,併發布編輯的腳本 - ,我將這標記爲答案。 – bsautner

相關問題