2016-07-20 22 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

相关问题