で関数を受信します。私はWindows用のC#とAndroid用のクライアントアプリケーションのサーバーアプリケーションを持っています。奇妙な行動は、私はそれについて学ぶためにUDPのテストを実施しようとしているAndroidの
私は自家製の発見サービスを実装しようとしています。サーバーは固定ストリング( "LazyRemote")でUDPパッケージを継続的にリッスンしています。それはその文字列を受信した場合には、クライアント(「LazyRemote_192.168.1.17:2016」)に、別の文字列を送信し 私は両方の方向に送信されたデータが正確であることのwiresharkでチェックしましたが、私はクライアントアプリケーションで間違った何かを受けています。
アンドロイドのためのコードはこれです:
buttonConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
progress.show();
//This code is executed when user clicks connect button. As it could be a long running operation, it's executed in a new thread to avoid blocking UI
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String ipAddress = "";
SocketClass my_socketClass = new SocketClass();
InetAddress UDPaddress = my_socketClass.getBroadcastAddress();
int UDPport = 15000;
if(initializationDone == false){
initializationDone = true;
try {
socket_send = new DatagramSocket();
socket_send.setBroadcast(true);
socket_send.setSoTimeout(6000);
socket_receive = new DatagramSocket(UDPport, InetAddress.getByName("0.0.0.0"));
} catch (Exception e) {
e.printStackTrace();
}
}
try {
byte[] send_buff = "LazyRemote".getBytes();
DatagramPacket sendPacket = new DatagramPacket(send_buff, send_buff.length,UDPaddress,UDPport);
socket_send.send(sendPacket);
}catch (Exception ex){
showToast("Imposible enviar primer ack");
}
byte[] receive_buff = new byte[30];
DatagramPacket receivePacket = new DatagramPacket(receive_buff, receive_buff.length);
try {
socket_receive.receive(receivePacket);
String receivedData = new String(receivePacket.getData(), "UTF-8");
if (receivedData.contains("LazyRemote")) {
SocketClass my_socket = new SocketClass(receivePacket.getAddress().toString().substring(1), 2016);
SocketClass.ConnectionStatus connectionStatus = my_socket.establishConnection();
//Remove progressdialog after establishConnection finishes.
progress.dismiss();
//Check connection status.
if (connectionStatus.status == true) {
Thread.sleep(1000);
socket_receive.close();
socket_send.close();
Intent intent = new Intent(MainActivity.this, ActionPerformer.class);
startActivity(intent);
finish();
}
}
} catch (Exception ex) {
progress.dismiss();
showToast("No se han encontrado servidores");
}
//mLock.release();
}
});
thread.start();
}
});
問題は、機能が働いているが、それは間違ったデータを受信している受信ことです。 (クライアントがサーバに送信して、descovery( "LazyRemote")を初期化するのと同じ文字列を受け取ります)。
それは愚かな間違いでなければなりませんが、私はそれを解決することはできません。どうもありがとう。あなたはあなたが送信されているのと同じポートで待機している場合
可能性のある重複した[受信UDPメッセージが不正な長さを持っている](http://stackoverflow.com/questions/36533359/received-udp-message-has-incorrect-length) – EJP
問題はな長さではありません。私は送られていない何かを受け取る。私はバッファと関連していると思うが、見つけられない。 – Aldridge1991