繁体   English   中英

Socket的dataInputStream知道如何处理多个写入吗?

[英]Is dataInputStream of a Socket know how to deal with multiple writings to it?

我通常在开发网络游戏:

我有一台服务器,它为连接到它的每个客户端启动一个serverThread。
其目的是侦听来自特定客户端的消息,并在服务器上对其进行处理。
同样,对于每个打开的客户端,它也会启动clientThread,这是侦听服务器消息的线程。
这两个线程是非常简单且相似的线程,它们实现了Runnable接口,因此覆盖了run方法。
每个Run方法都是某种无限循环,在其启动时具有命令(阻塞命令):

int命令= m_In.readInt();

然后通过切换接收到的命令的案例结构进行处理。
处理完成后,循环导致代码返回到阻塞的m_In.readInt()
等待另一个命令来。

我的问题是:我的Net游戏有足够的选项正在通过此m_In使用通信,那么如果有两个或更多消息几乎几乎一起发送到clientThread,会发生什么情况,dataInputStream将如何起作用?
它会开始处理第一条消息,完成后是否会抓取正在排队的第二条消息? 否则它可能会掉落第二条消息而丢失? 也许该流具有缓冲区,因此它将第二条消息存储在队列中或其他内容中?

谢谢

流本质上期望数据按指定顺序排列。 如果您有两个线程同时写入相同的流,则会发生不良情况。

现在,您当然可以同步对流的访问,并使两个线程交错进行写操作(只要您在流上构建某种格式来告诉接收方如何读取数据),但是默认情况下不会这样做。

但是,通常,每个客户端线程将具有自己的连接,从而具有各自的写入流。 服务器显然可以在“相同时间”从多个流中读取,这就是正常的服务器模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM