0
이것은 잠시 동안 나를 괴롭 히고 있으며이 문제를 해결하는 방법에 대해 확신 할 수 없습니다.서버가 패킷을 수신하려고 여러 번 시도합니다.
오전 데 문제가 실제로 이것은 패킷
에게 내가 클라이언트에서이 코드를받을 서버 전에 패킷을 밀어 여러 시도를 취할 것입니다 (서버는 동일하지만/수신 보내기는 역)과 서버 문제가 서버 하드웨어, 클라이언트 하드웨어, 안드로이드 프레임 워크, 네트워크, 라우터 설정이나 코드에 있는지 여부를 분리하기 위해 반환 패킷을
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) {
}
}
빠른 생각 - 이전에 시작한 별도의 스레드에서 수신을 시도하십시오. 너는 보낸다. 메시지를 보내면 수신자가 설정되기 전에 메시지가 전송 된 것 같습니다. –
그게 가능한거야 그래, 내가봤을 유일한 문제는 그것이 나타날 때까지 기다릴 것입니다 – adam2510
그게 자신의 스레드에 확인해야합니다. –