2012-01-07 125 views
1

我試圖按照MSDN上的exmaple創建一個異步服務器。但似乎沒有能夠連接到它。試圖啓動偵聽器套接字

http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx

這裏就是我有...

還要注意AddressList中[2],這是不是一個錯誤;)

private static Socket mListenerSocket; 

IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); 
IPEndPoint localEP = new IPEndPoint(ipHostInfo.AddressList[2], port); 

// This line outputs 192.168.0.6:6809 (which is correct) 
Console.WriteLine("{0}", localEP.ToString()); 

mListenerSocket = new Socket(
    ipHostInfo.AddressList[2].AddressFamily, 
    SocketType.Stream, 
    ProtocolType.Tcp); 

mListenerSocket.Bind(localEP); 
mListenerSocket.Listen(10); 
mListenerSocket.BeginAccept(new AsyncCallback(AcceptCallback), mListenerSocket); 

我的回調馬託被定義爲:

private static void AcceptCallback(IAsyncResult ar) 
{ 
    // It does not even get here 
    mListenerSocket.EndAccept(ar); 
} 

我期待當我使用telnet 192.168.0.6 6809 telnet時,它應該跳轉到AcceptCallback方法,但它不會,因此建立連接。

所以任何想法,爲什麼它不工作?在沒有錯誤,幫助我:(

我已經使用的TcpListener,而不是嘗試過,但同樣仍然無濟於事:(

mListenerSocket = new TcpListener(IPAddress.Any, port); 
mListenerSocket.Start(); 
mListenerSocket.BeginAcceptSocket(new AsyncCallback(AcceptCallback), mListenerSocket); 
+2

在一般情況下,使用更好的'TcpListener'和'TcpClient'。這些類似乎更容易使用 – rekire 2012-01-07 12:05:35

+1

'telnet'說'連接被拒絕',還是阻塞您的TCP超時期限? – 2012-01-07 12:14:41

+0

「無法打開與主機的連接,端口6809:連接失敗」 – craig1231 2012-01-07 12:16:01

回答

1

我的防火牆是防止連接到客戶端。即使我禁用它,我不得不重新啓動Visual Studio來捕獲它。

+0

當您在可視化環境中運行項目時,防火牆會詢問您(只有一次)允許您的程序,您應該打勾接受私人和公共網絡。 – R4j 2012-01-07 14:25:07