程序通过套接字监听客户端时冻结

时间:2013-06-22 20:51:40

标签: java sockets network-programming client-server

我正在尝试使用服务器套接字来监听客户端输入流,但是当我执行start_listening()方法时,我的程序被卡住了。我甚至试图删除循环,但我仍然有同样的问题。我猜它等待客户端互动。在程序工作的同时还有另一种方法可以听吗?

public static void start_listening(){

listener = new ServerSocket(9090);

while (true) {          
Socket socket = listener.accept();      
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
us = (User) in.readObject();
}

}

3 个答案:

答案 0 :(得分:2)

使用套接字技术时,accept()会阻止当前线程的执行,直到客户端连接到侦听套接字。这是一种已定义的行为。 Java documentation说:“方法[accept()]会阻塞,直到建立连接。”让服务器在无限循环内运行就可以了。

所以,为了让整个事情顺利进行,你可能想看看this socket example which uses threads。在run()的{​​{1}}方法中,您将处理您的用户对象。

答案 1 :(得分:1)

除了循环永远不会结束(我想你会在某个时候破坏),你应该在一个单独的ThreadAsyncTask中做那种东西,在主线程做的接受Andriod冻结,直到有人连接到插座。这就是你的程序被卡住的原因。

答案 2 :(得分:0)

您可以使用Boolean flag来指示何时结束while循环。其他方面,循环保持迭代,因为它永远不会中断。

while (true) {    //will it ever breaks ??

}