1

我正在用 C# 开发一个小型在线游戏。目前我正在使用简单的同步 TCP 套接字。但是现在(因为这是某种“学习项目”)我想转换为异步套接字。在客户端我有方法:byte[] SendAndReceive(Opcode op, byte[] data). 但是当我使用异步套接字时,这不再可能了。例如,我的MapManager班级首先检查地图是否在本地文件夹中(校验和),如果不是,则将从服务器下载地图。

所以我的问题是:有没有什么好的方法可以发送一些数据并获得答案,而无需将接收到的数据保存到某种缓冲区并轮询直到该缓冲区不为空?

4

2 回答 2

2

查看 IO Completion Ports 和随附的 SocketAsyncEventArgs。它会在数据传输时引发事件,但您仍然需要一个缓冲区。只是没有投票。它快速且非常有效。

http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod

和 MSDN 上的另一个例子

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

于 2012-10-01T18:48:17.627 回答
0

您所拥有的代码示例会有所帮助,但我建议为每个带有线程管理器的套接字连接使用一个新线程。Lmk 如果这有意义或适用于此。:)

于 2012-10-01T18:46:04.220 回答