簡體   English   中英

帶有Java客戶端的python套接字服務器-socket.error:[Errno 32]管道損壞

[英]python socket server with java client - socket.error: [Errno 32] Broken pipe

我正在嘗試使用基於python的套接字服務器將命令發送到rasberry pi,其中服務器將獲取各種字符串命令,執行某些操作,然后等待下一個命令。

我有一個用python編寫的套接字服務器在樹莓派上運行:

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 Server啟動正常並等待連接,當我運行客戶端代碼時,服務器輸出hello文本,后跟大量空白,然后

編輯:空白是while 1循環輸出傳入的數據,然后循環失控直到崩潰。 我想輸出文本並繼續列出以獲取更多連接。

編輯2:固定的python,因此它不會崩潰-我離開循環並重新啟動偵聽過程-可行。 如果可以改進此腳本,請lmk-它看起來像不會擴展。

errno.32是:管道斷開(如果TCP套接字的一端關閉連接(使用斷開連接)或被殺死,而另一端被終止,則發生管道斷開錯誤)

在您的Java客戶端中,您發送一些數據並立即關閉套接字,這可能會導致結果。我對java並不熟悉,但是需要注意以下兩點。

1.在Java客戶端中刪除sock.close()。

2.讓您的Java客戶端休眠一段時間,然后退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM