当前位置: 技术问答>java相关
请教用socket通信的基本问题!
来源: 互联网 发布时间:2017-04-26
本文导语: 请问程序中用socket通讯的话, (服务器端或是客户端)是不是必须有inputstream和outputstream? 也就是说这两个流是不是必须要都出现在通讯的过程中的? 如果服务器端没有outputstream的话, 客户端是不是就要进入“阻塞”...
请问程序中用socket通讯的话,
(服务器端或是客户端)是不是必须有inputstream和outputstream?
也就是说这两个流是不是必须要都出现在通讯的过程中的?
如果服务器端没有outputstream的话,
客户端是不是就要进入“阻塞”状态死等?
那要是不想让服务器马上回信,而是等待一会在回的话,
服务器端应该用什么样的方法而不用让客户端白等呢?
我是想编一个最最最最最最简单的基于socket的聊天室程序作为练习,
那么,我的服务器端的程序应该怎样做才能实现最基本的功能呢?
比如定时1-2秒向客户端发送数据等等。。
谢谢
(服务器端或是客户端)是不是必须有inputstream和outputstream?
也就是说这两个流是不是必须要都出现在通讯的过程中的?
如果服务器端没有outputstream的话,
客户端是不是就要进入“阻塞”状态死等?
那要是不想让服务器马上回信,而是等待一会在回的话,
服务器端应该用什么样的方法而不用让客户端白等呢?
我是想编一个最最最最最最简单的基于socket的聊天室程序作为练习,
那么,我的服务器端的程序应该怎样做才能实现最基本的功能呢?
比如定时1-2秒向客户端发送数据等等。。
谢谢
|
提示:
可以用Socket.getInputStream().available()来判断是否可以读取数据,而不用一直等待阻塞的socket,这样或许可以用一下模式来处理服务器端:
--服务器端不为每个用户提供两个线程(收、发)
--只提供两个线程(收、发)
--收线程循环遍历所有用户socket,有需要处理的进行接收处理,不需要处理则继续循环
--发线程循环所有用户信息列表,有需要处理的进行发送处理,不需要处理的则继续循环
考虑到效率问题,可以限制收、发线程各自的用户数量(如64个),用户数量超过64时,继续开线程进行处理
其实以上模式就是winsock中的事件重叠模式的翻版
可以用Socket.getInputStream().available()来判断是否可以读取数据,而不用一直等待阻塞的socket,这样或许可以用一下模式来处理服务器端:
--服务器端不为每个用户提供两个线程(收、发)
--只提供两个线程(收、发)
--收线程循环遍历所有用户socket,有需要处理的进行接收处理,不需要处理则继续循环
--发线程循环所有用户信息列表,有需要处理的进行发送处理,不需要处理的则继续循环
考虑到效率问题,可以限制收、发线程各自的用户数量(如64个),用户数量超过64时,继续开线程进行处理
其实以上模式就是winsock中的事件重叠模式的翻版
|
www.wrox.com
下载beginning java network programming
下载beginning java network programming