日期:2014-05-20  浏览次数:20655 次

java Socket编程
while(true)
{
  try{
Socket socket = serverSocket.accept();
System.out.printf("接受Socket之后的客户端:%s\n",socket.getInetAddress().getHostName());
  .....
  .....
  }
}
我在运行的时候该accept接受到了一个客户端后,正常执行了后面的语句,可是在没有接受到第2个客户端情况下,执行了第2句的System.out.printf("接受Socket之后的客户端:%s\n",socket.getInetAddress().getHostName())这条语句。
所以我想问:说的accept阻塞是不是说,只要没有新的客户端接入到服务器上,那么accept就停在那里,直到有新的客户端接入才会执行后面的语句?

------解决方案--------------------
探讨
所以我想问:说的accept阻塞是不是说,只要没有新的客户端接入到服务器上,那么accept就停在那里,直到有新的客户端接入才会执行后面的语句?

------解决方案--------------------
Socket socket = serverSocket.accept();
 
accept会堵塞,直到有客户端发起请求,你可以创建一个线程处理客户端请求。
------解决方案--------------------
当Accept监听到行的连接请求以后才会继续执行,然后服务端可以通过 Socket socket = serverSocket.accept() 获得客户端的socket 然后可以通过客户端的socket获得outputstream 或者inputsream 然后读取客户端的数据,或者给客户端发送数据 ,你想想你都没有监听到客户端的请求 你从哪儿去得到客户端的socket 没有请求肯定是堵塞的。
------解决方案--------------------
探讨
这是我的输出结果,我只请求了一次,怎么会执行两次输出“接受Socket之后的客户端:wwk-PC
before_number= 0number= 1
接受Socket之后的客户端:wwk-PC”?

------解决方案--------------------
探讨

Socket socket = serverSocket.accept();

accept会堵塞,直到有客户端发起请求,你可以创建一个线程处理客户端请求。

------解决方案--------------------
探讨

引用:
所以我想问:说的accept阻塞是不是说,只要没有新的客户端接入到服务器上,那么accept就停在那里,直到有新的客户端接入才会执行后面的语句?


是的,Accept就是阻塞直到有客户端发起连接请求,并成功连上来。