我在互联网上找到了以下代码,我需要允许我的用户输入他们自己的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);
提前感谢所有帮助:) 詹姆斯。
答案 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);
}