我正在尝试使用基于 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 服务器启动正常并等待连接,当我运行客户端代码时,服务器输出 hello
文本,后跟大量空格,然后
编辑:空白是 while 1
循环输出传入的数据,然后循环失控直到崩溃。我想输出文本并继续列出更多连接。
编辑2:修复了python,使其不会崩溃 - 我离开循环并重新启动监听进程 - 这有效。如果这个脚本可以改进,请 lmk - 它看起来不会扩展。
最佳答案
errno.32为:断管(断管错误发生在一端 TCP 套接字关闭连接(使用断开连接)或被杀死,另一个
在您的java客户端中,您发送一些数据并立即关闭套接字,这可能会导致结果。我对java不熟悉。但是您需要遵循以下两件事。
1.删除java客户端中的sock.close()。
2.让你的java客户端 hibernate 一段时间,然后退出。
关于java - 带有java客户端的python套接字服务器-socket.error : [Errno 32] Broken pipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483555/