不单只是java这样,我用过的C,delphi都是这样的,而且,如果可以双方互相通信的话,需要两个线程。因为既要你随时可以发送信息,又不影响接受信息,只有分开两个线程。我不知道你想问哪一个时刻socket是不是阻塞的,如果你写过socket的程序,你可以看到一定有一个accept(服务器端),一个connect(客户端)(java,c,delphi都是这样)。在accept这一步
是租塞的,如果没有客户端连接,服务器端不会工作(指socket这一个线程)。所以,如果你多个连接一个线程的话,那么一个连接过来后,服务器要么不能接下一个连接,要么到了accept阻塞掉了,当前操作做不了。
是租塞的,如果没有客户端连接,服务器端不会工作(指socket这一个线程)。所以,如果你多个连接一个线程的话,那么一个连接过来后,服务器要么不能接下一个连接,要么到了accept阻塞掉了,当前操作做不了。
解决方案 »
- 字节转化问题
- java 怎么判断文件夹的读写权限,请高手帮忙啊!
- 请问怎么在界面中嵌入播放器?
- jxta shell 和jxta是什么关系??
- 如何用hibernate批处理数据??不仅仅是添加删除!!请详看内容
- Statement提示有歧义,就是说在eclipse中提示有java.beans.Statement与java.sql.Statement.
- 学JAVA选JB好还是VJ#好?请资深的JAVA程序员给点意见。谢谢!!
- 给个Java程序让我练练还行呀!
- 请教高手,如何在一个string 中加入硬回车
- 请教notify()或notifyAll()的问题
- 控制APPLICATION窗体问题
- 如阿随机生成按钮
accept()
receive()
都是阻塞方法可以设置setSoTimeOut()
这样阻塞一定时间就抛出异常socket.setSoTimeOut(1000); // 1秒
try
{
socket.receive(dp);
}
catch(Exception e) // 如果一秒钟内没有收到数据包就产生异常
// 这样就不会永久阻塞
{
}
finally
{
socket.close();
}
java的网络编程里能用线程池吗?
线程池的前提是能够有网络事件触发,让吼道线程池中找个线程去读,但是java里要怎么知道什么时候数据到啊?
最后也只能每个客户一个线程让他慢慢等不是?
在那里可以下载?
如果我用非阻塞的话,会不会读不完或者发不完就返回?