Socket.SendAsync不是在Mono / Linux上按顺序发送的
有一个使用.NET Socket和TCP协议的单线程服务器,
Socket.Pool()
,Socket.Select()
,Socket.Receive()
。
要发送,我用过:
public void SendPacket(int clientid, byte[] packet)
{
clients[clientid].socket.Send(packet);
}
但是当向一个客户端发送大量数据(暂停整个主线程)时速度非常慢,所以我将其替换为:
public void SendPacket(int clientid, byte[] packet)
{
using (SocketAsyncEventArgs e = new SocketAsyncEventArgs())
{
e.SetBuffer(packet, 0, packet.Length);
clients[clientid].socket.SendAsync(e);
}
}
它在带有.NET的Windows上工作正常(我不知道它是否完美),但在使用Mono的Linux上,数据包被丢弃或重新排序(我不知道)。使用Socket.Send()恢复为慢速版本适用于Linux。整个服务器的来源。
如何编写适用于Linux的非阻塞SendPacket()函数?
没有找到相关结果
已邀请:
3 个回复
授巨
声明和你的
电话有关。也许
超出范围并且正在处理,而
仍在处理缓冲区。但是这可能会引发异常。我真的只是在猜测。尝试删除
语句,看看会发生什么。
烫珊
惜堡沁戚