C#TCP / IP自定义IP和端口

时间:2015-07-21 17:38:46

标签: c# visual-studio

我在互联网上找到了以下代码,我需要允许我的用户输入他们自己的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());

        }

它允许我使用上面的数据发送我的数据,但我确实需要能够输入端口号。

当我尝试类似下面的内容时,我收到以下错误:参数:无法从'string'转换为'int'。

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

提前感谢所有帮助:) 詹姆斯。

4 个答案:

答案 0 :(得分: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(作为一般做法),因此也要验证您在代码中收到了使用输入的整数。

答案 1 :(得分:2)

您需要将端口转换为整数值。

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

答案 2 :(得分:0)

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

您只需将端口string转换为int,如错误所示。

答案 3 :(得分:0)

由于您尝试转换用户输入,我建议使用int.TryParse,因为它不一定是int。

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