以下是代码。如果您尝试运行,程序将崩溃您的计算机
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 10000);
Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sk.Bind(ip);
sk.Listen(100);
while (true) {
sk.BeginAccept(new AsyncCallback(OnReveive), sk);
}
private static void OnReveive(IAsyncResult ar) {
Socket sock = (Socket) ar.AsyncState;
Socket cl = sock.EndAccept(ar);
Console.WriteLine("New Connection from" + cl.RemoteEndPoint.ToString());
}
我想问为什么它会导致我的电脑崩溃
答案 0 :(得分:6)
while (true) {
sk.BeginAccept(new AsyncCallback(OnReveive), sk);
}
BeginAccept
是一种异步方法,可立即返回,因此您的代码会使用new AsyncCallback(OnReveive)
回调快速填充内存池。只打电话一次,不要把它放在while
。
或者调用阻止方法Accept()。