0

我正在尝试创建一个服务器套接字来监听客户端输入流,但是当我执行该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();
}

}
4

3 回答 3

2

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

所以,要让整个事情运行起来,你可能想看看这个使用线程的套接字示例。在您的run()方法内部ConnectionHandler将处理您的 User 对象。

于 2013-06-22T23:07:43.330 回答
1

除了循环永远不会结束(我想你会在某个时候中断)之外,你应该在单独的ThreadAsyncTask中执行此类操作,在主线程中执行 accept 会使 Andriod 冻结,直到有人连接到套接字。这就是你的程序卡住的原因。

于 2013-06-22T21:21:58.703 回答
0

您可能只使用 aBoolean flag来指示何时结束 while 循环。否则循环保持迭代,因为它永远不会中断。

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

}
于 2013-06-22T21:00:38.007 回答