我尝试使用基于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 - 它看起来不会缩放。
答案 0 :(得分:1)
errno.32是:管道损坏(如果管道的一端出现断管错误) TCP套接字关闭连接(使用断开连接)或被杀死,另一个
在你的java客户端,你发送一些数据并立即关闭套接字可能会导致结果。我不熟悉java.But这里有两件事你需要遵循。
1.删除java客户端中的sock.close()。
2.让您的Java客户端暂停一段时间,但退出。