2011-09-14 51 views
2

我有一個小問題和一個解決方案,但是我想了解到底發生了什麼。 根據UdpClient的構造函數,我使用EndReceive()是否拋出一個Socket Exeption(10054-現有連接被遠程主機關閉(從德語翻譯))UdpClient。()vs UdpClient(port)

感謝您的任何提示! 文森特

private UdpClient udpClient; 

    void recv(IAsyncResult res) 
    { 
     IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0); 
     byte[] data = udpClient.EndReceive(res, ref remote); // code stops here in debug 

     // do something with data received from remote 

     udpClient.BeginReceive(new AsyncCallback(recv), null); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

     //udpClient = new UdpClient(); // will throw exception 
     udpClient = new UdpClient(8000); // will not throw exception 
     udpClient.Connect("127.0.0.1", 8000); 
     udpClient.BeginReceive(new AsyncCallback(recv), null); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     udpClient.Send(Encoding.ASCII.GetBytes("Hallo"), 5); 
    } 
+0

你究竟在哪裏得到異常?在'BeginReceive'調用?我已經嘗試過你的示例,並且可以毫無例外地啓動它 – Jan

+0

不,代碼在EndReceive處停止,你是否改變了form1_load中使用的構造函數?我發佈了工作代碼,所以對於錯誤你必須改變它 – Vincent

回答

1

案例1: - udpClient =新的UdpClient()你
情況下2結合插座隨機本地端口:udpClient =新的UdpClient(8000) - 您綁定套接字的本地端口8000

也許萬一1遠程主機嘗試發送到隨機端口,並被防火牆拒絕?

+0

你是對的!由於connect()函數中的特定端口,我沒有考慮本地端口。非常感謝 – Vincent