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