0

ポート3001で、LAN経由で5秒ごとにパケットをブロードキャストするC言語で記述されたUDPサーバーがあります。

ポート 3001 (AsyncTask スレッド内) でリッスンしている Android アプリケーションを UDP クライアントとして作成しています。これは receive() メソッドまで実行されていますが、このポートでデータが検出されないようです。

これが私のコードです:

private class ConnectionTask extends AsyncTask<Void, Integer, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0) {

        String receivedString = "";

        byte[] receiveData = new byte[1024];

        DatagramSocket clientSocket;
        try {
            while(true){
                clientSocket = new DatagramSocket(5000);
                DatagramPacket receivePacket = new DatagramPacket(receiveData,
                        receiveData.length);
                clientSocket.receive(receivePacket);
                receivedString = new String(receivePacket.getData());
            }


        } catch (SocketException e) {
            Log.v("SocketExceptionOccured", e.toString());
            e.printStackTrace();
            //clientSocket.close();
        } catch (IOException e) {
            Log.v("IOExceptionOccured", e.toString());
            e.printStackTrace();
            //clientSocket.close();
        }

        Toast.makeText(getBaseContext(), receivedString, Toast.LENGTH_LONG)
                .show();

        return null;

    }

}

USBケーブルを使用して、デバッグ用に自分のデバイスでコードをテストします。

コンピューターで実行されている単純な UDP クライアント (C) でサーバーをテストしましたが、通信は問題ありません。

このコードが機能しない理由がわかりません。誰かアイデアはありますか?

ありがとう、

4

3 に答える 3

0

ループのたびにソケットを作成して閉じないでください。最初に作成し、後で閉じます。現在、ソケットが存在しない時間帯があるため、ソケットへのデータグラムはドロップされます。また、キューに入れられたすべてのデータグラムは、ソケットを閉じるたびにドロップされます。

于 2013-09-25T23:31:06.927 に答える
0

whileループを離れることはありません。メッセージはおそらく受信され、その後、ループによりデータグラムソケットが再度リッスンします。

于 2013-09-25T22:25:08.490 に答える