2015-07-21 354 views
0

我在互聯網上找到了下面的代碼,我需要允許我的用戶輸入自己的IP地址和端口號,而不是硬編碼。C#TCP/IP自定義IP和端口

我允許我的用戶從兩個單獨的文本框中輸入IP和端口。

  try 
     { 
      TcpClient tcpclnt = new TcpClient(); 
      Console.WriteLine("Connecting"); 
      tcpclnt.Connect(syn_ip.Text, 7878); 

      Console.WriteLine("Connected"); 

      //String str=Console.ReadLine();x 
      Stream stm = tcpclnt.GetStream(); 

      ASCIIEncoding asen = new ASCIIEncoding(); 
      byte[] ba = asen.GetBytes("data here"); 
      Console.WriteLine("Transmitting."); 

      stm.Write(ba, 0, ba.Length); 

      byte[] bb = new byte[100]; 
      int k = stm.Read(bb, 0, 100); 

      for (int i = 0; i < k; i++) 
       Console.Write(Convert.ToChar(bb[i])); 


      tcpclnt.Close(); 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine("Error:" + ex.ToString()); 

     } 

它會讓我發送我的數據使用上述,但我真的需要能夠輸入端口號。

當我嘗試類似下面的內容時,出現以下錯誤:參數:無法從'字符串'轉換爲'int'。

tcpclnt.Connect(syn_ip.Text, syn_port.Text); 

感謝提前所有幫助:) 詹姆斯。

回答

2

您需要將端口轉換爲整數值。

int port = Int32.Parse(syn_port.Text); 
tcpclnt.Connect(syn_ip.Text, port); 
0
tcpclnt.Connect(syn_ip.Text, int.Parse(syn_port.Text)); 

你只需要在端口string轉換爲int,因爲錯誤提示。

3

在此代碼

tcpclnt.Connect(syn_ip.Text, syn_port.Text); 

syn_port.Text是字符串類型,但一個整數的預期。簡單的解決方法是

tcpclnt.Connect(syn_ip.Text, int.Parse(syn_port.Text)); 

這將在運行時拋出一個異常,如果輸入什麼,但一個整數。相反,考慮更強大的解決方案

int port; 
bool ok = int.TryParse(syn_port.Text, out port); 
if (ok) 
{ 
    tcpclnt.Connect(syn_ip.Text, port); 
} 
else // Some error message 

請注意,您還應該修改UI以僅允許輸入整數。你也不應該相信一個UI(作爲一個普通的做法),所以也要驗證你在你的代碼中使用了輸入的整數。

+0

我永遠只是建立INT成'while'循環:'而(int.TryParse(輸入,超時值)!){/ *讀取輸入這裏* /}' –

+0

@EBrown:由於這是一個WinForms應用程序,/ *讀取輸入這裏* /有點複雜。他可能運行此代碼以響應UI事件(例如,按鈕單擊)。他需要通知用戶存在問題並從事件處理程序返回,以便UI繼續工作並收集新的輸入。 –

0

由於您試圖轉換用戶輸入,因此我建議您考慮它不可能總是一個整數,因此建議int.TryParse

int port; 
if (int.TryParse(syn_port.Text, port)) 
{ 
    tcpclnt.Connect(syn_ip.Text, port); 
}