Witam,
tworze prosta aplikację do wysyłania i odpierania danych po UDP. Niestety mój program nie odbiera danych, albo jednorazowo odbierze jedną paczkę. Jest ktoś w stanie naprowadzić mnie w czym tkwi problem.
package com.pezet.sender1;
import android.app.Activity;
import android.net.wifi.WifiConfiguration;
import android.nfc.Tag;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import android.app.Dialog;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
DatagramSocket socket = null;
public String adresIp;
public EditText textAdres;
public EditText dane;
public EditText localport;
public int port;
public TextView redane;
public String Text1 ="dane" ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.conect);
TextView text = (TextView) findViewById(R.id.textView);
button.setOnClickListener(handleClick);
textAdres = (EditText) findViewById(R.id.ipAdres);
localport = (EditText) findViewById(R.id.port);
dane = (EditText) findViewById(R.id.dane);
redane = (TextView) findViewById(R.id.redane);
new Thread(new MyDatagramReceiver()).start();
setTitle("Udp klient");
}
private View.OnClickListener handleClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Client()).start();
/// showToastText("wysłane");
redane.setText("Wysłane");
}
;
};
public void showToastText(CharSequence toastText) {
Toast.makeText(getApplicationContext(), toastText, Toast.LENGTH_SHORT).show();
}
public class Client implements Runnable {
@Override
public void run() {
try {
adresIp = textAdres.getText().toString();
InetAddress adres = InetAddress.getByName(adresIp);
port = Integer.valueOf(localport.getText().toString());
DatagramSocket socket = new DatagramSocket(port);
String buffer = dane.getText().toString();
byte[] buf = (buffer).getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, adres, port);
socket.send(packet);
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// redane.setText("dane"+ new String(recpacket.getData())+"ip adres"+ recpacket.getAddress());
}
}
private void updatetext(final String dane){
runOnUiThread(new Runnable() {
@Override
public void run() {
redane.append(dane);
}
});
}
public class MyDatagramReceiver implements Runnable {
boolean run = true;
public void run() {
while (run) {
try {
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
port = Integer.valueOf(localport.getText().toString());
////DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
DatagramSocket redata = new DatagramSocket(port);
redata.receive(receivePacket);
// InetAddress readres = receivePacket.getAddress();
/// int porty = receivePacket.getPort();
///Text1 = new String(receivePacket.getData()) + readres;
Text1 = new String(receiveData, 0, receivePacket.getLength());
updatetext(Text1);
Log.e("ODEBRANE", Text1);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
run = false;
}
finally {
run = false;
}
}
}
}}