2014-07-18 30 views
0

如在其他SO问题中所建议的,我遵循本教程https://www.youtube.com/watch?v=ObcGBT4ZWEU 这适用于局域网,但是当我尝试通过从任何Web服务获取的IP尝试Internet时,使用端口80,它给了意大利的部分为“地址请求非在自己的范围内有效”的形象 errorc#TCP/IP通信错误:请求的地址在自己的上下文中无效

错误(我不知道这是否会为这个错误英文文本) 错误出来了“开始“按钮(按钮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()); 
     } 

    } 

插座变量声明为全局:

Socket sck; 
    EndPoint epLocal, epRemote; 

和初始化:

 sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 

任何建议?谢谢!!

编辑:我successfull得到englsh错误! enter image description here 在意大利versione我的精确太行,它是:

sck.Bind(epLocal); 
+0

你有使用的有效IP吗?如果它在本地局域网上工作,听起来你可能会使用错误的IP地址。你是在公司环境中还是在家中连接?如果在家中,您可能需要使用http://whatsmyip.org/查看本地IP,因为很可能您的路由器正在进行NAT转换。这也可能意味着远程IP不在该端口上侦听。您可以尝试执行telnet 并查看您是否连接。什么是抛出异常? – Mike

+0

也可以看看这里http://bytes.com/topic/c-sharp/answers/233487-tcpclient-exception-requested-address-not-valid-its-context – Mike

+0

转到https://www.grc。 com/shieldsup然后按继续,向下滚动到可以选择端口扫描的地方“在那里你可以看到你是互联网提供商的IP”,并扫描你的计算机的开放端口,如果需要的话。 – Creator

回答

1

你还没有告诉我们什么textLocalIp.Text值,但问题可能出在那里。

您不能绑定到任何IP地址,它必须是您的计算机中的一个网卡的地址,或者对于“任何”网卡必须为0.0.0.0。尝试使用路由器的公共IP地址或朋友的IP地址不起作用。

大多数情况下,您应该跳过调用Bind并让Windows选择本地地址和端口。如果你想要一个特定的端口,然后绑定使用INADDR_ANY这是0.0.0.0,以及该端口。

+0

嗯,我应该使用相同的IP朋友用来连接到我,作为本地IP,反之亦然。使用ip我发现与ipconfig在cmd(ipv4 ip地址我认为,192.168.x.y)它完美的工作!然后我可以自动使用一个函数来传递本地ip,如youtube教程中所示。 非常感谢! – Raikoug

相关问题