正如其他SO问题所示,我遵循了本教程https://www.youtube.com/watch?v=ObcGBT4ZWEU 这适用于局域网,但是当我尝试使用从任何Web服务获取的IP并使用端口80进行互联网时,它会在图像中显示错误
意大利语部分是“在自己的上下文中请求无效的地址”(我不知道这是否是此错误的英文文本) “开始”按钮(按钮1)出现错误。代码是:
private void button1_Click(object sender, EventArgs e)
{
try
{
epLocal = new IPEndPoint(IPAddress.Parse(textLocalIp.Text), Convert.ToInt32(textLocalPort.Text));
sck.Bind(epLocal);
epRemote = new IPEndPoint(IPAddress.Parse(textFriendsIp.Text), Convert.ToInt32(textFriendsPort.Text));
sck.Connect(epRemote);
byte[] buffer = new byte[1500];
sck.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref epRemote, new AsyncCallback(MessageCallBack), buffer);
button1.Text = "Connected";
button1.Enabled = false;
button2.Enabled = true;
textMessage.Focus();
}
catch (Exception exp)
{
MessageBox.Show(exp.ToString());
}
}
套接字变量声明为global:
Socket sck;
EndPoint epLocal, epRemote;
并初始化为:
sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
有什么建议吗?!谢谢!
编辑:我成功得到一个englsh错误! 在意大利语版本中我也有精确的线条,它是:
sck.Bind(epLocal);
答案 0 :(得分:1)
您尚未告诉我们textLocalIp.Text
的价值是什么,但问题可能就在那里。
您无法绑定到任何IP地址,它必须是您计算机中某个网卡的地址,或0.0.0.0
表示“任何”。尝试使用路由器的公共IP地址或朋友的IP地址将无法正常工作。
大多数情况下,您应该跳过调用Bind
并让Windows选择本地地址和端口。如果您需要特定端口,请使用INADDR_ANY
0.0.0.0
以及该端口进行绑定。