0

こんにちは、私は現在 DatagramSockets を使用して Android でプロジェクトを作成していますが、プログラミングはあまり得意ではありません。登録ページを作っています。私の Android デバイスは、ユーザー名やレシート コードなどの情報を使用して PC に接続します。私のPCはデータを受信できます。PC がデータを受信したら、レシート コードが有効で未使用かどうかを確認する必要があります。次に、無効、未使用、使用済み、または有効な場合にクライアントに送信します。問題は、PC が送信したデータを Android デバイスが受信できないことです。私は本当にあなたの助けが必要です。現在、エミュレーターを使用しています。専門家の助けが必要です。これが私のコードです:

Android デバイス:

public class RegisterAsyncTask extends AsyncTask<String, Integer, String>{
    private DatagramSocket socket;
    private DatagramPacket p;
    private byte[] receiveData = new byte[1024];

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        try {
            InetAddress local = InetAddress.getByName("10.0.2.2");
            socket = new DatagramSocket();
            p = new DatagramPacket(params[0].getBytes(), params[0].length(),local,12345);
            socket.send(p);
            Log.d ("asd", "Packet sent");
            p = new DatagramPacket (receiveData, receiveData.length);
            Log.d ("asd", "Receiving packet");
            socket.receive(p);
            Log.d ("asd", "Packet received");
            String message = new String (p.getData(), 0 , p.getLength());
            Log.d ("asd", message);
            return message;
        }
        catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

PC:

public class HandleAClient {

    private DatagramSocket socket;
    private DatagramPacket packet;
    private int server_port = 12345;
    private byte[] receiveData = new byte[1024];
    private String receiptCode;
    private InetAddress clientAddress;
    private String errorMessage;

    public HandleAClient (DatagramSocket socket, DatagramPacket packet) {
        //Initializes instance variables
        this.socket = socket;
        this.packet = packet;

    }
    public void registerClient () {
        try {
            String message = new String (packet.getData(),0,packet.getLength());
            Parser parser = new Parser();
            receiptCode = parser.getReceiptCode(message);
            System.out.println (receiptCode);
            System.out.println ("Message: " + message + " on " + packet.getAddress() + " on port "  + server_port);
            String cadd = packet.getAddress().toString();
            String newcadd = cadd.substring(1, cadd.length());
            System.out.println (newcadd);
            clientAddress = InetAddress.getByName(newcadd);

            if (!ControlVariables.db.checkReceiptCode(receiptCode)) {
                errorMessage = "Invalid Code";
                System.out.println (errorMessage);
                packet = new DatagramPacket(errorMessage.getBytes(), errorMessage.length(),clientAddress,12345);
                socket.send(packet);
                System.out.println ("error message send" + " to " +newcadd);
            }
            else {
                ReceiptCode rc = new ReceiptCode();
                rc = ControlVariables.db.getReceiptCode(receiptCode);
                if (rc.getStatus().equals("used")) {
                    errorMessage = "Used Code";
                    packet = new DatagramPacket(errorMessage.getBytes(), errorMessage.length(),clientAddress,12345);
                    socket.send(packet);
                }
                else {
                    System.out.println (receiptCode);
                    System.out.println ("Message: " + message + " on " + packet.getAddress() + " on port "  + server_port);
                    errorMessage = "Successful";
                    packet = new DatagramPacket(errorMessage.getBytes(), errorMessage.length(),clientAddress,12345);
                    socket.send(packet);
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
4

1 に答える 1