0

これはしばらくの間私を悩ませてきましたが、どうすればこの問題を解決できるかわかりません。

私が抱えている問題は、サーバーが実際にパケットを受信する前に、パケットのプッシュを数回試行する必要があることです

これは私がクライアントに持っているコードです(サーバーは同一ですが、送受信が逆になっています)。サーバーはパケットからクライアントIPを取得して、戻りパケットを送信します

class MainTask extends AsyncTask<Void, Void, Void> {
ProgressDialog progress = null;
Context context = null;
  public MainTask(ProgressDialog progress, Context context) {
    this.progress = progress;
    this.context = context;
  }

public void onPreExecute() {        
    progress.show();
  }

  public Void doInBackground(Void... unused) {
      // Send UDP Packet
        String messageStr="Hello Android!";
        int server_port = 12441;
        DatagramSocket s = null;
        DatagramPacket p = null;
        InetAddress local = null;
        Log.i("EyeceBoxService", "Sending packet");
        try {
            s = new DatagramSocket();
            local = InetAddress.getByName("192.168.0.4");
            int msg_length=messageStr.length();
            byte[] message = messageStr.getBytes();
            p = new DatagramPacket(message, msg_length,local,server_port);
            s.send(p);
            Log.i("EyeceBoxService", "Packet Sent!");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          // Receive UDP Packet
        byte[] message = new byte[1500];
        try {
            //progress.setMessage("Retrieving Discovery Information...");
            p = new DatagramPacket(message, message.length);
            s = new DatagramSocket(server_port);
            Log.i("EyeceBoxService", "Waiting for packet");
            s.receive(p);
            String address = p.getAddress().toString();
            Log.i("EyeceBoxService", "Server IP address" + address);
            //progress.setMessage("Done...");
            //MainActivity.buildNotification(context, address);
            progress.dismiss();
            s.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;      
        }

  public void onPostExecute(Void unused) {
  }
}
4

1 に答える 1

0

問題がサーバー ハードウェア、クライアント ハードウェア、Android フレームワーク、ネットワーク、ルーター構成、またはコードにあるかどうかを特定してください。Wireshark、netcat、ipsend などのデバッグ ツールを使用してみて、実際に送信、受信されたパケット、コマンドライン経由でパケット送信が機能するかどうかなどを確認してください。

于 2012-09-04T18:31:53.897 に答える