2
我试图改进我们的一些网络代码,在这里我需要使用Socket.Send
。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();
}
不过,我不确定有关的偏移量,因为它是从零开始的,这可能会导致偏移这里每个循环缺少一个单字节,还是我错了?
另外,有没有其他的最佳实践需要关注?
WCF不适合电子产品;-) – 2012-01-10 11:40:41
啊:)嗯,你的代码应该可以正常工作。过去我通过增加一个偏移量来做类似的事情:) – NibblyPig 2012-01-10 11:48:18