原文:http://warnerhit.iteye.com/blog/1415793
android socket通讯,PC和模拟器,两个模拟器之间的通信
=====================================================================================
我已经试验成功:
ps:模拟器做服务器,PC机做客户端。如果通过wifi连接的话直接访问IP就行,不用重定向。
PC访问模拟器用localhost即127.0.0.1,模拟器 访问模拟器用10.0.2.2
本人已成功运行,看你的RP了- -
server:
- /**
- * Server.java
- * @author wuzq
- * @create 2012-2-21
- */
- package com.warner.client;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.Console;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.net.Socket;
- public class G3ExpPCclient {
- public static final String adb_path= "E:\\android-sdk-windows\\tools\\adb ";//adb所在路径
- private static final String HOST = "localhost";
- private static final int PORT = 8080;
- private Socket socket = null;
- private BufferedReader in = null;
- private PrintWriter out = null;
- public G3ExpPCclient() {
- try {
- socket = new Socket(HOST, PORT);
- in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
- out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
- } catch (IOException ex) {
- ex.printStackTrace();
- System.out.println("login exception" + ex.getMessage());
- }
- }
- public void openUrl(String msg) {
- if (socket.isConnected()) {
- if (!socket.isOutputShutdown()) {
- out.println(msg);
- }
- }
- }
- public static void main(String[] args) {
- try {
- //把虚拟机的8090端口绑定到PC本机的8080端口,这样当PC向8080发送数据时实际上是发到虚拟机的8090端口
- //Runtime.getRuntime().exec(G3ExpPCclient.adb_path + " –s emulator-5554 forward tcp:8080 tcp:8090");这个方法不好用
- Runtime.getRuntime().exec(G3ExpPCclient.adb_path + " forward tcp:8080 tcp:8090");//这个好用
- System.out.println("已经将虚拟机端口8090绑定到PC端口8080 "+adb_path);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- G3ExpPCclient pc = new G3ExpPCclient();
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- while (true) {
- String msg="";
- try {
- msg = br.readLine();
- System.out.println("将打开:" + msg); //输入完整路径http://www.baidu.com
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (msg.equals("exit")) {
- System.out.println("退出");
- System.exit(-1);
- } else {
- pc.openUrl(msg);
- }
- }
- }
- }
/**
* Server.java
* @author wuzq
* @create 2012-2-21
*/
package com.warner.client;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class G3ExpPCclient {
public static final String adb_path= "E:\\android-sdk-windows\\tools\\adb ";//adb所在路径
private static final String HOST = "localhost";
private static final int PORT = 8080;
private Socket socket = null;
private BufferedReader in = null;
private PrintWriter out = null;
public G3ExpPCclient() {
try {
socket = new Socket(HOST, PORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
} catch (IOException ex) {
ex.printStackTrace();
System.out.println("login exception" + ex.getMessage());
}
}
public void openUrl(String msg) {
if (socket.isConnected()) {
if (!socket.isOutputShutdown()) {
out.println(msg);
}
}
}
public static void main(String[] args) {
try {
//把虚拟机的8090端口绑定到PC本机的8080端口,这样当PC向8080发送数据时实际上是发到虚拟机的8090端口
//Runtime.getRuntime().exec(G3ExpPCclient.adb_path + " –s emulator-5554 forward tcp:8080 tcp:8090");这个方法不好用
Runtime.getRuntime().exec(G3ExpPCclient.adb_path + " forward tcp:8080 tcp:8090");//这个好用
System.out.println("已经将虚拟机端口8090绑定到PC端口8080 "+adb_path);
} catch (IOException e1) {
e1.printStackTrace();
}
G3ExpPCclient pc = new G3ExpPCclient();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String msg="";
try {
msg = br.readLine();
System.out.println("将打开:" + msg); //输入完整路径http://www.baidu.com
} catch (IOException e) {
e.printStackTrace();
}
if (msg.equals("exit")) {
System.out.println("退出");
System.exit(-1);
} else {
pc.openUrl(msg);
}
}
}
}
client:
- /**
- * G3Exp.java
- * @author wuzq
- * @create 2012-2-21
- */
- package com.warner.activity;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.net.ServerSocket;
- import java.net.Socket;
- import android.app.Activity;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.widget.TextView;
- public class G3Exp extends Activity {
- // 定义侦听端口号
- private final int SERVER_PORT = 8090;
- private TextView textView;
- private String content = "";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.g3exp);
- textView = (TextView)findViewById(R.id.g3_msg);
- // 开一个新的线程来侦听客户端连接及发来的信息和打开相应网站
- new Thread() {
- public void run() {
- startServer();
- }
- }.start();
- }
- private void startServer() {
- try {
- //ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
- ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
- // 循环侦听客户端连接请求
- while (true) {
- Socket client = serverSocket.accept();
- try {
- Log.e("hehheh", "有人来访:");
- // 等待客户端发送打开网站的消息
- BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
- String str = in.readLine();
- content += str+"\n";
- mHandler.sendMessage(mHandler.obtainMessage());
- openUrl(str);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- client.close();
- }
- Thread.sleep(3000);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void openUrl(String url) {
- Uri uri = Uri.parse(url);
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
- }
- public Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- textView.setText(textView.getText().toString()+content);
- }
- };
- }
/**
* G3Exp.java
* @author wuzq
* @create 2012-2-21
*/
package com.warner.activity;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;
public class G3Exp extends Activity {
// 定义侦听端口号
private final int SERVER_PORT = 8090;
private TextView textView;
private String content = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.g3exp);
textView = (TextView)findViewById(R.id.g3_msg);
// 开一个新的线程来侦听客户端连接及发来的信息和打开相应网站
new Thread() {
public void run() {
startServer();
}
}.start();
}
private void startServer() {
try {
//ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
// 循环侦听客户端连接请求
while (true) {
Socket client = serverSocket.accept();
try {
Log.e("hehheh", "有人来访:");
// 等待客户端发送打开网站的消息
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
content += str+"\n";
mHandler.sendMessage(mHandler.obtainMessage());
openUrl(str);
} catch (Exception e) {
e.printStackTrace();
} finally {
client.close();
}
Thread.sleep(3000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void openUrl(String url) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(textView.getText().toString()+content);
}
};
}
别忘了加:<uses-permission android:name="android.permission.INTERNET" />