C#套接字。在慢速连接上通过TCP / IP发送数据

时间:2011-04-26 21:17:15

标签: c# sockets tcp

我在服务器和客户端之间建立了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)
        {

        }
    }

2 个答案:

答案 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)是真的。

简单有效!