2014-10-29 101 views
1

我在c#.net中制作了一个简单的聊天应用程序,用于在两台计算机之间发送和接收数据。套接字 - UDP通过互联网发送数据

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

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上的两台计算机之间的任何问题,但我想知道(如果可能)如何在互联网上做同样的事情。

从我在互联网上搜索的东西看来,我必须使用端口转发才能做到这一点,所以我已经这样做了,但我不知道该怎么做。所以我的问题是,我应该如何改变这个代码(如果我必须),所以我可以通过互联网发送和接收数据(UDP),假设我已经正确转发了端口并假设我知道外部IP两台路由器?

预先感谢您。

回答

0

只要您的(公共)IP地址正确并且端口在您的路由器上正确转发(意思是在正确的协议上转发到正确的专用IP,在您的情况下为UDP )。

你知道这是UDP,所以它不是可靠的数据传输。