Подключение 2 экземпляров эмулятора В Android

Я хочу создать сервер и клиент в 2 эмуляторах для записи и чтения данных. Я пишу код для сервера:

public class ServerActivity extends Activity { /** Called when the activity is first created. */ private ServerSocket serverSocket = null; private TextView tv; public static final int SERVERPORT = 4444; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv= (TextView) findViewById(R.id.myTextView); try { Connect(); } catch (IOException e) { // TODO Auto-generated catch block tv.setText("Not connected"); e.printStackTrace(); } } public void Connect() throws IOException { serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress("10.0.2.15", 4444)); while(true) { Socket socket = serverSocket.accept(); tv.setText("Connected..."); } } 

И код для клиента

 public class ClientActivity extends Activity { /** Called when the activity is first created. */ private Button bt; private TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button) findViewById(R.id.myButton); tv = (TextView) findViewById(R.id.myTextView); bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub try { Socket socket = new Socket("10.0.2.2", 4445); } catch (UnknownHostException e) { // TODO Auto-generated catch block tv.setText("Error1"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block tv.setText("Error2"); e.printStackTrace(); } } }); } } 

Я настроил перенаправление:

 telnet localhost 5554 redir add tcp:4445:4444 

Но это не соединение …. Пожалуйста, помогите мне. Я ценю это.

Через некоторое время у меня был успех. Я вообще не делал ссылок на 10.0.2.15 ни на сервере, ни на клиенте. Я открыл серверный сокет по-разному и обработал комм в отдельном потоке. Я запустил сервер на эмуляторе 5554 и клиент на 5556.

Мой код сервера, прослушивание 6000

 public class SocketServer extends Activity { ServerSocket ss = null; String mClientMsg = ""; Thread myCommsThread = null; protected static final int MSG_ID = 0x1337; public static final int SERVERPORT = 6000; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.TextView01); tv.setText("Nothing from client yet"); this.myCommsThread = new Thread(new CommsThread()); this.myCommsThread.start(); } @Override protected void onStop() { super.onStop(); try { // make sure you close the socket upon exiting ss.close(); } catch (IOException e) { e.printStackTrace(); } } Handler myUpdateHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MSG_ID: TextView tv = (TextView) findViewById(R.id.TextView01); tv.setText(mClientMsg); break; default: break; } super.handleMessage(msg); } }; class CommsThread implements Runnable { public void run() { Socket s = null; try { ss = new ServerSocket(SERVERPORT ); } catch (IOException e) { e.printStackTrace(); } while (!Thread.currentThread().isInterrupted()) { Message m = new Message(); m.what = MSG_ID; try { if (s == null) s = ss.accept(); BufferedReader input = new BufferedReader( new InputStreamReader(s.getInputStream())); String st = null; st = input.readLine(); mClientMsg = st; myUpdateHandler.sendMessage(m); } catch (IOException e) { e.printStackTrace(); } } } } } 

Я перенаправил порты, похожие на вас

 telnet localhost 5554 redir add tcp:5000:6000 

Мой клиентский код устанавливает соединение на порту 5000:

 public class SocketClient extends Activity { private Button bt; private TextView tv; private Socket socket; private String serverIpAddress = "10.0.2.2"; // AND THAT'S MY DEV'T MACHINE WHERE PACKETS TO // PORT 5000 GET REDIRECTED TO THE SERVER EMULATOR'S // PORT 6000 private static final int REDIRECTED_SERVERPORT = 5000; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button) findViewById(R.id.myButton); tv = (TextView) findViewById(R.id.myTextView); try { InetAddress serverAddr = InetAddress.getByName(serverIpAddress); socket = new Socket(serverAddr, REDIRECTED_SERVERPORT); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { EditText et = (EditText) findViewById(R.id.EditText01); String str = et.getText().toString(); PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); out.println(str); Log.d("Client", "Client sent message"); } catch (UnknownHostException e) { tv.setText("Error1"); e.printStackTrace(); } catch (IOException e) { tv.setText("Error2"); e.printStackTrace(); } catch (Exception e) { tv.setText("Error3"); e.printStackTrace(); } } }); } } 

На сервере есть один TextView для получения сообщения, у клиента есть один EditText для компоновки сообщения и кнопки для его отправки.

Он отлично работает

Вам просто нужно добавить два шага: 1) Добавить тег разрешения INTERNET вне тега приложения в AndroidManifest.xml

2) Не работает с android> 3 из-за ограничения сети на поток пользовательского интерфейса