android socket通讯,PC和模拟器,两个模拟器之间的通信

原文: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:

 

Java代码   收藏代码
  1. /** 
  2.  * Server.java 
  3.  * @author wuzq 
  4.  * @create 2012-2-21 
  5.  */  
  6. package com.warner.client;  
  7.   
  8. import java.io.BufferedReader;  
  9. import java.io.BufferedWriter;  
  10. import java.io.Console;  
  11. import java.io.IOException;  
  12. import java.io.InputStreamReader;  
  13. import java.io.OutputStreamWriter;  
  14. import java.io.PrintWriter;  
  15. import java.net.Socket;  
  16.   
  17. public class G3ExpPCclient {  
  18.     public static final String adb_path= "E:\\android-sdk-windows\\tools\\adb ";//adb所在路径  
  19.     private static final String HOST = "localhost";  
  20.     private static final int PORT = 8080;  
  21.     private Socket socket = null;  
  22.     private BufferedReader in = null;  
  23.     private PrintWriter out = null;  
  24.   
  25.     public G3ExpPCclient() {  
  26.         try {  
  27.             socket = new Socket(HOST, PORT);  
  28.             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  29.             out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);  
  30.         } catch (IOException ex) {  
  31.             ex.printStackTrace();  
  32.             System.out.println("login exception" + ex.getMessage());  
  33.         }  
  34.     }  
  35.   
  36.     public void openUrl(String msg) {  
  37.         if (socket.isConnected()) {  
  38.             if (!socket.isOutputShutdown()) {  
  39.                 out.println(msg);  
  40.             }  
  41.         }  
  42.     }  
  43.   
  44.     public static void main(String[] args) {  
  45.         try {  
  46.             //把虚拟机的8090端口绑定到PC本机的8080端口,这样当PC向8080发送数据时实际上是发到虚拟机的8090端口  
  47.             //Runtime.getRuntime().exec(G3ExpPCclient.adb_path + " –s emulator-5554 forward tcp:8080 tcp:8090");这个方法不好用  
  48.             Runtime.getRuntime().exec(G3ExpPCclient.adb_path + " forward tcp:8080 tcp:8090");//这个好用  
  49.             System.out.println("已经将虚拟机端口8090绑定到PC端口8080 "+adb_path);  
  50.         } catch (IOException e1) {  
  51.             e1.printStackTrace();  
  52.         }  
  53.           
  54.         G3ExpPCclient pc = new G3ExpPCclient();  
  55.           
  56.          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  57.       
  58.         while (true) {  
  59.       
  60.             String msg="";  
  61.               
  62.             try {  
  63.                 msg = br.readLine();  
  64.                 System.out.println("将打开:" + msg);   //输入完整路径http://www.baidu.com  
  65.             } catch (IOException e) {  
  66.                 e.printStackTrace();  
  67.             }  
  68.   
  69.             if (msg.equals("exit")) {  
  70.                 System.out.println("退出");  
  71.                 System.exit(-1);  
  72.             } else {  
  73.                 pc.openUrl(msg);  
  74.             }  
  75.         }  
  76.     }  
  77. }  
/**
 * 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:

 

Java代码   收藏代码
  1. /** 
  2.  * G3Exp.java 
  3.  * @author wuzq 
  4.  * @create 2012-2-21 
  5.  */  
  6. package com.warner.activity;  
  7.   
  8. import java.io.BufferedReader;  
  9. import java.io.InputStreamReader;  
  10. import java.net.ServerSocket;  
  11. import java.net.Socket;  
  12.   
  13. import android.app.Activity;  
  14. import android.content.Intent;  
  15. import android.net.Uri;  
  16. import android.os.Bundle;  
  17. import android.os.Handler;  
  18. import android.os.Message;  
  19. import android.util.Log;  
  20. import android.widget.TextView;  
  21.   
  22. public class G3Exp extends Activity {  
  23.     // 定义侦听端口号  
  24.     private final int SERVER_PORT = 8090;  
  25.     private TextView textView;  
  26.     private String content = "";  
  27.       
  28.       
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.g3exp);  
  33.         textView = (TextView)findViewById(R.id.g3_msg);  
  34.           
  35.         // 开一个新的线程来侦听客户端连接及发来的信息和打开相应网站  
  36.         new Thread() {  
  37.             public void run() {  
  38.                 startServer();  
  39.             }  
  40.         }.start();  
  41.     }  
  42.   
  43.     private void startServer() {  
  44.         try {  
  45.             //ServerSocket serverSocket = new ServerSocket(SERVER_PORT);  
  46.             ServerSocket serverSocket = new ServerSocket(SERVER_PORT);  
  47.             // 循环侦听客户端连接请求  
  48.             while (true) {  
  49.                 Socket client = serverSocket.accept();  
  50.                   
  51.                 try {  
  52.                     Log.e("hehheh""有人来访:");  
  53.                     // 等待客户端发送打开网站的消息  
  54.                     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));  
  55.                     String str = in.readLine();  
  56.                     content += str+"\n";  
  57.                     mHandler.sendMessage(mHandler.obtainMessage());  
  58.                     openUrl(str);  
  59.                 } catch (Exception e) {  
  60.                     e.printStackTrace();  
  61.                 } finally {  
  62.                     client.close();  
  63.                 }  
  64.                 Thread.sleep(3000);  
  65.             }  
  66.         } catch (Exception e) {  
  67.             e.printStackTrace();  
  68.         }  
  69.     }  
  70.   
  71.     private void openUrl(String url) {  
  72.         Uri uri = Uri.parse(url);  
  73.         Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
  74.         startActivity(intent);  
  75.     }  
  76.       
  77.     public Handler mHandler = new Handler() {  
  78.         public void handleMessage(Message msg) {  
  79.             super.handleMessage(msg);  
  80.             textView.setText(textView.getText().toString()+content);  
  81.         }  
  82.     };  
  83. }  
/**
 * 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" />


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值