【发布时间】:2011-11-03 17:25:16
【问题描述】:
我正在通过 tcp 套接字发送一些非大字符串。今天我发送了 2031 个字节,而接收端并没有得到全部(我已经发送了更大的消息 - 在 2040 字节之前到几天前) - 这并不是那么糟糕,程序知道出了问题并再次发送数据(第三次尝试成功)。现在我想知道是否应该将消息分成更小的块并在循环语句中发送它们?我的代码中是否有我遗漏的东西?
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,0);
sock.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket,SocketOptionName.SendTimeout,0);
LingerOption lingerOption = new LingerOption (true, 1);
sock.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket,SocketOptionName.Linger, lingerOption );
sock.Blocking = true;
try
{
sock.Connect(_dostHostEp);
}
catch(SocketException e)
{
sock.Close();
throw new Exception("Connection error (" + _dostHostEp.Address + ":" + _dostHostEp.Port + ")" + e.Message);
}
try
{
sock.Send(Encoding.UTF8.GetBytes(message));
}
catch(SocketException e)
{
sock.Close();
throw new Exception("Error while sending message to (" + _dostHostEp.Address + ":" + _dostHostEp.Port + ")" + e.Message);
}
【问题讨论】:
-
副本说“异步”,但问题实际上是一样的。在链接的问题中阅读我的答案。