0

Hi I am currently making a project in Android using DatagramSockets and I'm not really that good in programming. I am making a registration page. My android device connects to the pc with information like username and receiptcode. My pc can receive the data. When my pc receives the data I need to check if the receiptcode is valid and unused. Then I would send to the client if it is invalid, unused, used or valid. The problem is my android device can't receive the data the pc sent. I really need your help guys. Currently I'm using an emulator. I need experts help. Here is my code:

Android Device:

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();
        }
    }

1 Answers1

0

Since I can't add a comment to your post, I'll try this way.

I've read that emulator can't use real internet connection. So I do not realize how you send data to PC.

Please provide more information on errors or info you have about not receiving packets.

Community
  • 1
  • 1
Dino Velić
  • 888
  • 11
  • 24
  • I have also tried using a tablet. but still same results. There are no errors. It will just stuck on socket.receive(p) in android. It will wait for a packet to be receive. – Gejutel K. Landegre Aug 09 '13 at 13:37
  • Give us more info. Did you go through the debugger, line by line? Where does it stop? At receive()? Also, don't forget to close your sockets. – Dino Velić Aug 09 '13 at 13:43