こんにちは、私は現在 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();
}
}