我正在使用一個系統在網絡上的對等點之間發送數據。一個應用程序是用Java編寫的Android應用程序。另一個應用程序是用C#編寫的。排除UDP代碼故障
我在Android上用Java編寫代碼來發送UDP數據報。我寫了C#代碼來發送和接收數據報。我試圖從Android向PC發送消息。我可以在WireShark中看到該消息,但不能在我的程序中看到。所以,我把我的程序放在第二臺PC上。我成功地從我的電腦發送消息到第二個消息。但是當我試圖從seond電腦發送消息回到我的失敗。我可以在我的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();
感謝,
邁克
你爲什麼要用UDP? UDP不會執行數據包錯誤控制。你必須自己確定你的數據包是有序的,沒有被刪除或重複。你有兩個以上的同伴嗎?我建議您使用TCP,如果它不會對您的應用程序性能產生任何影響。 – Frank
我很害怕。這是一款Wii類型的視頻遊戲。遊戲在PC上運行,Android用於控制器。 PC將圖像發送到Android。 Android會將加速計信息發送回PC。 – Mikutus