0

クライアントは UDP パケットをインターネット経由でサーバーに送信しますが、サーバーから UDP パッケージを受信できませんでした。

サーバーには有効な IP があり、ADSL 経由でインターネットに接続しています

サーバーとクライアントの両方で、次のコードが使用されます。

送信パケット:

Socket sock1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);                    
IPEndPoint iep1 = new IPEndPoint(IPAddress.Parse(txt_IP.Text), Convert.ToInt32(txt_SendPort.Text));
byte[] data = Encoding.ASCII.GetBytes("UDP");

sock1.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
sock1.SendTo(data, iep1);

受信パケット:

Console.WriteLine("Listening to the port {0}", PortNumber);
sock1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, PortNumber);
sock1.Bind(iep);
EndPoint ep = (EndPoint)iep;
byte[] data1 = new byte[100];
int recv = sock1.ReceiveFrom(data1, ref ep);
sock1.Close();
String str_Data = Encoding.ASCII.GetString(data1, 0, recv);
String str_IP = ep.ToString().Substring(0, ep.ToString().IndexOf(":"));
Console.WriteLine("Received Succesfully: {0} - {1}", str_Data, str_IP);

私の NIC IP は 169.254.254.5 ですが、サーバーは私の IP が 188.136.170.14 であることを示し、188.136.170.14 に応答を送信します (188.136.170.14 はアクセス ポイントの IP です)。サーバー側のコードを変更して、パケットをクライアントに正しく送信するにはどうすればよいですか?

4

2 に答える 2

0

アクセスポイントで、それはあなたのルーターですか?あなたはADSLと言ったので、そうだと思います。

ルーターは 2 つのネットワークにまたがっています。インターネットは ISP の形式で一方にあり、内部ネットワークは他方にあります。これが、サーバーが NIC IP ではなくルーター IP を認識する理由です。

ルーターでポート転送ルールを定義して、使用しているポートのインバウンド トラフィックを PC に送信する必要があります。ブロードキャストも使用しないでください。これは、サブネット上の多数の NIC に接続するためのものです。

厳密に言えば、これはプログラミングの問題ではなく、ネットワークの問題です。

于 2013-08-28T12:23:22.820 に答える