【问题标题】:sockets - UDP Send data via internet套接字 - UDP 通过互联网发送数据
【发布时间】:2014-10-29 15:03:11
【问题描述】:

我在 c#.net 中制作了一个简单的聊天应用程序,可以在两台计算机之间发送和接收数据。

所以,我用这个方法发送数据:

int port = 11000;    
private void send(string data, string ip)
{
    Socket sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    IPEndPoint sending_end_point = null;
    byte[] send_buffer = Encoding.ASCII.GetBytes(data);
    sending_end_point = new IPEndPoint(IPAddress.Parse(ip), port);
    try { sending_socket.SendTo(send_buffer, sending_end_point); }
    catch { }
}

为了接收,我使用了这个:

string receiveddata = "";
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    UdpClient listener = new UdpClient(port);
    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, port);
    byte[] receive_byte_array;

    try
    {
        receive_byte_array = listener.Receive(ref groupEP);
        receiveddata = Encoding.ASCII.GetString(receive_byte_array, 0, receive_byte_array.Length);
    }
    catch { }
    listener.Close();
}

这在 LAN 上的两台计算机之间没有任何问题,但我想知道(如果可能的话)如何通过 Internet 做同样的事情。

根据我在互联网上的搜索,似乎我必须使用端口转发才能做到这一点,所以我已经这样做了,但我不知道我应该知道什么。

所以我的问题是,我应该如何更改此代码(如果必须),以便我可以通过 Internet 发送和接收数据 (UDP),假设我已经正确转发了端口并且假设我知道外部 IP两个路由器?

提前谢谢你。

【问题讨论】:

    标签: c# .net sockets


    【解决方案1】:

    这应该可以正常工作,只要您的(公共)IP 地址正确并且端口在您的路由器上正确转发(意思是,在正确的协议上转发到正确的私有 IP,在您的情况下为 UDP) .

    您知道这是 UDP,因此它不是可靠的数据传输。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多