2013-06-22 49 views
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(); 
} 

} 

回答

2

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

所以,为了让这个整体运行,你可能想看看this socket example which uses threads。在的run()方法内,您将处理您的用户对象。

+0

谢谢,这真的很有帮助。 –

+0

不客气:) – actc

0

你可能只使用一个Booleanflag指示何时结束,而loop.Other明智循环保持迭代,因为它从来没有断。

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

} 
+0

我删除了循环,它仍然卡住 –

1

除此之外循环永远不会结束(我想你会在某个时候突破),你应该做这样的东西在一个单独的ThreadAsyncTask,做接受主线程使得Andriod的冻结,直到有人连接到插座。这就是为什么你的程序卡住了。

+0

谢谢,我会尽量找到一种方法来分开它们。 –