2013-07-31 128 views
3

嗨,我使用的TcpClient和TCPlitner來傳輸數據,但我得到的錯誤不低於連接 是我的代碼因爲目標機器主動拒絕,所以無法建立連接?

private void button1_Click(object sender, EventArgs e) 
{ 
    TcpClient tcpc = new TcpClient("192.168.21.46", 10);    
    NetworkStream nts = tcpc.GetStream(); 
    if (nts.CanWrite) 
    { 
     Byte[] sends = System.Text.Encoding.ASCII.GetBytes(textBox1.Text.ToCharArray()); 
     nts.Write(sends, 0, sends.Length); 
     nts.Flush(); 
    } 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    TcpListener myListener = new TcpListener(10); 
    myListener.Start(); 
    while (true) 
    { 
     //Accept a new connection 
     Socket mySocket = myListener.AcceptSocket(); 
     if (mySocket.Connected) 
     {     
      //make a byte array and receive data from the client 
      Byte[] receive = new Byte[64]; 
      int i = mySocket.Receive(receive, receive.Length, 0); 
      char[] unwanted = { ' ', ' ', ' ' }; 
      string rece = System.Text.Encoding.ASCII.GetString(receive); 
      label1.Text = rece.TrimEnd(unwanted);     
     } 
    } 
} 

這兩個按鈕,我在其中提到的相同的形式和IP apddress增加了我係統IP地址。誰能告訴我爲什麼發生這種情況。即使我也刪除防火牆設置。

+0

你在同一時間按下兩個按鈕,或者我不明白的東西... – Cynede

+1

是目標機器上的端口免費供您使用? – MrFox

+0

@Heather一鍵點擊連接插座,然後傳送和第二個按鈕recive數據 – Jankya

回答

0

我假設你有兩個不同的方案,而另一種是發送人聽。如果你不這樣做,把它們分開。我認爲你有一個網絡問題,但不能確切地說明爲什麼它被阻止。

您使用端口10,這通常是太低任意應用程序使用,即使它不是當前被佔用。如果您正在構建自定義協議,請嘗試在大約1000以上的端口上收聽(更多經驗法則)。你可以在這裏看看http://technet.microsoft.com/en-us/library/cc959828.aspx或谷歌的「tcp衆所周知的端口」瞭解更多細節,並確保你沒有碰撞。

嘗試運行您的TCP監聽器,然後打開命令提示符,然後鍵入以下

telnet localhost 10 

或使用你改變10的端口號。我試過你的代碼,並且能夠連接到端口10而沒有問題。如果您沒有「telnet」程序,則可以在Windows中打開該功能。 (搜索「功能」,然後選擇「打開窗口功能打開或關閉」,然後打開「Telnet客戶端」上)

如果Telnet程序連接,你就會知道,這個問題是不是連接有關。如果telnet程序無法連接,那麼您將知道某些內容仍然阻塞該端口。嘗試不同的端口並重新測試連接。一旦telnet連接,您就可以專注於程序的TCP客戶端部分。

+0

目標機器是相同的,即使我打開telnet的功能,但得到同樣的問題,現在我使用高端口號,但沒有運氣。事實上,我想從一個exe文件發送一些數據到另一個exe文件,爲此我使用這個。但我堅持連接tcp。 – Jankya

0

首先,您的UI將掛在按鈕2上,因爲它卡在while(true)循環中,所以使用BeginAcceptSocket(IAsyncResult r,Object state)作爲異步。

其次,你必須使用環回地址或其他防火牆應該阻止端口10假定它不是開放的。此外,TcpListener(int port)是obsolote,它更好地使用TcpListener(IPAddress localddr,int port)並使用兩個回送地址。

相關問題