我在服务器和客户端之间建立了TCP / IP连接。建立连接后,服务器将开始向客户端发送大量数据。我遇到的问题是如果连接速度很慢,在某些时候服务器将无法响应。我想这是因为它正在缓冲数据,等待已经发送的数据被确认。
在尝试发送数据以检查当前缓冲区的大小之前是否有办法,所以我知道我应该等待继续发送数据?
感谢。
这就是我正在发送的数据:
System.Net.Sockets.Socket ClientSocket;
...
public void Send(byte[] data, int size)
{
try
{
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.SetBuffer(data, 0, size);
bool pending = ClientSocket.SendAsync(e);
}
catch (Exception ex)
{
}
}
答案 0 :(得分:1)
documentation for SendAsync表示操作完成后会在SocketAsyncEventArgs.Completed
参数上引发e
事件。因此,如果您编写一个响应该事件的事件处理程序,您始终可以知道您已完成的操作数量。
在这里使用这个事件有一个相当不错的例子:http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx
答案 1 :(得分:0)
我找到了解决方案。基本上我只应该在
时发送数据 ClientSocket.Poll(0, SelectMode.SelectWrite)
是真的。
简单有效!