0

here is my Code

package com.example.messenger; 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.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.os.StrictMode; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @SuppressLint("NewApi") public class MainActivity extends Activity implements View.OnClickListener { Button Send; EditText IPAdresse; EditText TEXT; TextView RXtext,tstep,rstep; private static final int TIMEOUT_MS = 1000; private static final int server_port = 13011; @SuppressLint({ "NewApi", "NewApi", "NewApi" }) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); IPAdresse = (EditText) findViewById(R.id.etIPAdresse); IPAdresse.setText("192.168.2.32"); TEXT = (EditText) findViewById(R.id.etTEXT); Send = (Button) findViewById(R.id.bSendaa); RXtext = (TextView) findViewById(R.id.tvRXtext); tstep = (TextView) findViewById(R.id.tvTstep); rstep = (TextView) findViewById(R.id.tvRstep); Send.setOnClickListener(this); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub String text; byte[] message = new byte[1500]; DatagramSocket s; while(true){ try { s= new DatagramSocket(server_port); rstep.setText("1"); s.setBroadcast(true); rstep.setText("2"); s.setSoTimeout(TIMEOUT_MS); rstep.setText("3"); while(true){ DatagramPacket p = new DatagramPacket(message, message.length); rstep.setText("4"); //InetAddress test = InetAddress.getByName("192.168.1.101"); //rstep.setText("5"); //s.connect(test,12345); //rstep.setText("6"); s.receive(p); rstep.setText("xxx"); text = new String(message, 0, p.getLength()); RXtext.setText(text); } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); rstep.setText("fail socket create"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); rstep.setText("fail receive"); } } } }); } public void onClick(View arg0) { // TODO Auto-generated method stub switch(arg0.getId()){ case R.id.bSendaa: tstep.setText("1"); String messageStr= TEXT.getText().toString(); tstep.setText("2"); DatagramSocket s; try { s = new DatagramSocket(); tstep.setText("3"); s.setBroadcast(true); tstep.setText("4"); s.setSoTimeout(TIMEOUT_MS); tstep.setText("5"); InetAddress local = InetAddress.getByName(IPAdresse.getText().toString()); tstep.setText("6"); int msg_length=messageStr.length(); tstep.setText("7"); byte[] message = messageStr.getBytes(); tstep.setText("8"); DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port); tstep.setText("9"); s.connect(local,server_port); tstep.setText("10"); s.send(p); tstep.setText("sending complete"); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); tstep.setText("sending failed"); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

My android phone's Ip is 192.168.2.32 , I saw it in wifi settings. So when I debug it row by row , I saw that my virtual device sent the packet , but I don't know why my phone can't get it. Can anybody help me? Thanks Regards

1 Answer 1

0

now it works , I didn't call start() function for thread , and I should change the UI from runOnUiThread , but it worked only from device to device, not from Virtual Device to Device, so here is the working code

package com.example.messenger; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketAddress; import java.net.SocketException; import java.net.UnknownHostException; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.os.StrictMode; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @SuppressLint("NewApi") public class MainActivity extends Activity implements View.OnClickListener { Button Send; EditText IPAdresse; EditText TEXT; TextView RXtext,tstep,rstep; private static final int TIMEOUT_MS = 10000; private static final int server_port = 13011; String mMessage; @SuppressLint({ "NewApi", "NewApi", "NewApi" }) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); IPAdresse = (EditText) findViewById(R.id.etIPAdresse); IPAdresse.setText("192.168.2.32"); TEXT = (EditText) findViewById(R.id.etTEXT); Send = (Button) findViewById(R.id.bSendaa); RXtext = (TextView) findViewById(R.id.tvRXtext); tstep = (TextView) findViewById(R.id.tvTstep); rstep = (TextView) findViewById(R.id.tvRstep); Send.setOnClickListener(this); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub String text; byte[] message = new byte[4]; DatagramSocket s; try { s= new DatagramSocket(server_port); s.setSoTimeout(TIMEOUT_MS); while(true){ try { DatagramPacket p = new DatagramPacket(message, message.length); s.receive(p); mMessage = new String(message, 0, p.getLength()); runOnUiThread(new Runnable() { @Override public void run() { RXtext.setText(mMessage); } }); } catch(Exception e) { e.printStackTrace(); } } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); //rstep.setText("fail socket create"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); //rstep.setText("fail receive"); } } }).start(); } public void onClick(View arg0) { // TODO Auto-generated method stub switch(arg0.getId()){ case R.id.bSendaa: String messageStr= TEXT.getText().toString(); DatagramSocket s; try { s = new DatagramSocket(); s.setBroadcast(true); s.setSoTimeout(TIMEOUT_MS); InetAddress local = InetAddress.getByName(IPAdresse.getText().toString()); int msg_length=messageStr.length(); byte[] message = messageStr.getBytes(); DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port); //s.connect(local,server_port); s.send(p); tstep.setText("sending complete"); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); tstep.setText("sending failed"); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.