2014-10-29 113 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,所以它不是可靠的數據傳輸。