1

ネットワーク上のピア間でデータを送信するシステムに取り組んでいます。1 つのアプリは、Android 用に Java で記述されています。もう 1 つのアプリは、PC 上の C# で記述されています。

UDP データグラムを送信するコードを Android 上で Java で作成しました。そして、データグラムを送受信するための C# コードを作成しました。Android から PC にメッセージを送信しようとしました。WireShark ではメッセージが表示されましたが、プログラムでは表示されませんでした。そこで、プログラムを 2 台目の PC に置きました。自分のPCから2台目にメッセージを送ることに成功。しかし、2 番目の PC から自分の PC にメッセージを送信しようとすると、失敗しました。PC の WireShark では確認できましたが、アプリケーションでは確認できませんでした。次に何をしようか途方に暮れています。何か提案はありますか?WireShark では UDP パケットが表示されるのに、アプリケーションでは表示されないのはなぜですか?

Here is my code.

//C# code on PC
//Sender
sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, rotocolType.Udp);
send_to_address = IPAddress.Parse(strIPAddress);
sending_end_point = new IPEndPoint(send_to_address, intPort);
sending_socket.EnableBroadcast = true;
byte[] bytMessage = Encoding.ASCII.GetBytes(strMessage);
sending_socket.SendTo(bytMessage, sending_end_point);



//Listener
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
byte[] bytReceiveDataByteArray;
try
{
   listener.EnableBroadcast = true;

   while (isRunning)
   {
      //listen for data from sender
      bytReceiveDataByteArray = listener.Receive(ref groupEP);
      //Fire an event to send the data to the hosting code
      if (DataReceived != null)
      {
         DataReceivedEventArgs e = new DataReceivedEventArgs(bytReceiveDataByteArray);
         DataReceived(this, e);
      }
   }
}


//Java code on Android
DatagramSocket socket = new DatagramSocket();
InetAddress serverIP = InetAddress.getByName(strIpAddress);
byte[] outData = (strMsg).getBytes();
DatagramPacket out = new DatagramPacket(outData,outData.length, serverIP,50005);
socket.send(out);
socket.close();

ありがとう、

マイク

4

1 に答える 1

1

プログラムが特定の PC (「Windows1」と呼びましょう) で実行されている場合の問題が正しいことを理解していれば、UDP パケットを受信することはありません。Java Android や、別の PC で実行されている C# コード (「Windows2」と呼びましょう) からは受信しません。

ただし、「Windows2」でプログラムを実行すると、「Windows1」からメッセージを受け取ります。「Windows1」でファイアウォールが有効になっていて、UDP ポート 50005 の例外がないようです。「Windows2」では、ファイアウォールがオフになっているか、50005 の例外があり、これが「Windows1」からメッセージを受信する理由です。

UDP は接続指向ではないため、ファイアウォール エラーによって通常の接続タイムアウト エラーが発生することはありません。メッセージはドロップされるだけで、エラーは発生しません。

于 2012-11-05T01:25:23.210 に答える