C# 套接字。发送最佳实践

C# 套接字。发送最佳实践,c#,C#,我正在尝试改进一些网络代码,这里我需要使用Socket.Send 然而,MSDN声明处理重试是开发人员自己的责任,并且由于Socket.Send方法不需要在单个请求中发送所有数据(取决于缓冲区大小),因此我决定执行以下循环: try { int timeout = TimeSpan.FromSeconds(10).Milliseconds; int waitTime = TimeSpan.FromMilliseconds(30).Milliseconds; Socket

我正在尝试改进一些网络代码,这里我需要使用
Socket.Send

然而,MSDN声明处理重试是开发人员自己的责任,并且由于Socket.Send方法不需要在单个请求中发送所有数据(取决于缓冲区大小),因此我决定执行以下循环:

try
{
    int timeout = TimeSpan.FromSeconds(10).Milliseconds;
    int waitTime = TimeSpan.FromMilliseconds(30).Milliseconds;

    Socket socket = tcpClient.Client;
    socket.SendTimeout = timeout ;

    int offset = 0;

    while (offset != data.Length)
    {
        if (socket.Poll(waitTime , SelectMode.SelectWrite))
        {
            offset += socket.Send(data, offset, data.Length - offset, SocketFlags.None);
        }
    }
}
catch (SocketException)
{
    tcpClient.Close();
}
但是,我不确定偏移量,因为它是基于零的,这可能会导致偏移量在这里的每个循环中丢失一个字节,还是我错了

此外,这里还有其他值得关注的最佳实践吗?

MSDN文章说:

返回值类型:System.Int32发送到 插座

这样我就不用担心了。我唯一的最佳实践建议是考虑使用WCF,它比.NET中的套接字更容易使用和更可靠,特别是对于任何复杂的。

< P>:MSDN文章说:

返回值类型:System.Int32发送到 插座

这样我就不用担心了。我唯一的最佳实践建议是考虑使用WCF,它比.NET中的套接字更容易使用和更可靠,特别是对于任何复杂的东西。

A:),你的代码应该工作得很好。我过去也做过类似的事情,通过增加一个偏移量变量:)啊:)好吧,你的代码应该可以正常工作。我过去也做过类似的事情,增加了一个偏移量变量:)