如何检查TCP缓冲区是否已满

时间:2019-02-03 14:17:52

标签: c# android unity3d

我有一个小游戏,您可以使用TCP套接字连接到自制的C#专用服务器。在我的手机上的Unity Editor,Standalone Windows build和Unity Remote中,我的游戏运行良好,服务器和所有客户端都完全确认了我的数据包。我手机上的Android版本使事情变得肮脏。

我可以开始游戏,在大厅上创建新游戏室,并在准备好后运行游戏室。但是在游戏中,我无法按预期移动。起初,我以为是我的播放器控制器,但事实并非如此。这是正在发生的事情:

游戏看到触摸输入并通过网络发送它;

服务器接收到数据包,可以读取,理解数据包并将其答案(如果有效)广播给任何已连接的客户端;

案例1:客户端在我的异步连接上不会收到任何消息(甚至没有调用OnReceive方法)(发生了99%的事件)

情况2:客户端收到数据包,理解它并在游戏中应用相应的行为->玩家移动(在网格上使用自定义线程A *寻路)。这种情况很少发生。

猜测接收缓冲区已满。

我想知道不是进入某种睡眠模式的android网络系统。我看到它可能会发生,但是我不知道如何解决这个问题,或者它是否与我的问题有关。

今天,从理论上讲,我不理解为什么会发生这种现象以及如何解决它。如果有人有任何线索,我将不胜感激。

谢谢你们

1 个答案:

答案 0 :(得分:0)

在发送前尝试检查套接字是否可以写aka缓冲区未满

https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.poll?view=netframework-4.7.2