带有java客户端的python套接字服务器 - socket.error:[Errno 32]断管

时间:2016-07-20 14:05:57

标签: java python sockets

我尝试使用基于python的套接字服务器向rasberry pi发送命令,服务器将获取各种字符串命令,执行某些操作然后等待下一个命令。

我有一个用覆盆子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服务器启动正常并等待连接,当我运行客户端代码时,服务器输出hello文本后跟大量空格,然后

编辑:空格是while 1循环输出传入的数据然后循环失控直到它崩溃。我想输出文本并继续列出更多连接。

编辑2:修复python所以它不会崩溃 - 我离开循环并重新启动监听过程 - 这是有效的。如果这个脚本可以改进,请lmk - 它看起来不会缩放。

1 个答案:

答案 0 :(得分:1)

errno.32是:管道损坏(如果管道的一端出现断管错误) TCP套接字关闭连接(使用断开连接)或被杀死,另一个

在你的java客户端,你发送一些数据并立即关闭套接字可能会导致结果。我不熟悉java.But这里有两件事你需要遵循。

1.删除java客户端中的sock.close()。

2.让您的Java客户端暂停一段时间,但退出。