2016-09-23 104 views
0

這裏是你嘗試運行code.If,程序會崩潰您的計算機的Socket程序崩潰計算機

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

o_o使您的計算機崩潰?你的意思是像死亡藍屏?無限懸掛(卡住螺紋)? – Eon

+0

不,它像物理內存增加得非常快 –

+2

那麼這裏有什麼問題? –

回答

6
while (true) { 
    sk.BeginAccept(new AsyncCallback(OnReveive), sk); 
    } 

BeginAccept是即時返回的異步方法,以便您的代碼通過new AsyncCallback(OnReveive)回調快速填充內存池。只打一次,不要放在while

或者調用阻塞方法Accept()

+1

發現,不知道這是否是他的問題。很好看:P – Eon

+0

好的,謝謝 –