2015-07-21 347 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); 
}