1
我有這種方法,我用它來發送傳輸對象Socket.send()懸掛/睡在服務器
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 7777);
Socket sockListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
sockListener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
sockListener.Bind(ipEnd);
sockListener.Listen(100);
s = sockListener.Accept();
private void sendToClient(Transfer.Transfer tt)
{
byte[] buffer = new byte[15000];
IFormatter f = new BinaryFormatter();
Stream stream = new MemoryStream(buffer);
f.Serialize(stream, tt);
Console.WriteLine("1/3 serialized");
stream.Flush();
Console.WriteLine("2/3 flushed stream");
s.Send(buffer, buffer.Length, 0);
Console.WriteLine("3/3 send to client");
}
奇怪的是它工作的第2次我打電話,然後3號稱它掛在s.send()上。
它是相同的,如果我想發送字符串,而不是傳輸。
也許你的客戶沒有閱讀你發送的東西,在這種情況下,服務器最終會因各種緩衝區填滿而阻塞。 – nos 2011-05-23 18:47:03