如何实现Android两个模拟器之间的通信

之前写模拟器和pc机通信没有遇到过多大问题,这两天想做一个把Socket通信的服务端和客户端都用Android模拟器实现,有点小麻烦,搜集一些资料,也试用很多方法,最后终于实现了模拟器之间的链接:

第一步:首先是创建两个模拟器:cmd下命令创建或在eclispe中创建avd都可以实现,这里不多说

 

第二步:启动两个模拟器

 

第三步:查看模拟器设备是否正常启动

在命令行中输入adb devices (前提启动模拟器)

第四步:选择一个模拟器作为服务器,假如选择emulator-5554 device, 客户端为emulator-5556 device

在cmd中执行如下命令:telnet localhost 5554  进入如下界面:

然后继续执行:redir add tcp:8192:8191 作下重定向

注意:如果telnet localhost 5554命令不识别时,请到控制面板安装Telnet客户端

 

 

第五步:编写服务端代码

 

public class MySocketServerActivity extends Activity {
	//坐标值
	float event_x=0;
	float event_y=0;
    public static final int SERVERPORT = 8191;  //注意这里和上面重定向的配置是有关系的。 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MySurface(this));
        new MyServerThread().start();
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    	event_x=event.getX();
    	event_y=event.getY();
    	System.out.println("获得坐标["+event_x+","+event_y+"]");
    	return super.onTouchEvent(event);
    }
    
  //启动服务器线程
    class MyServerThread extends Thread{
    	@Override
    	public void run() {
    		 try { 
    	        System.out.println("AAAAAAAAAAAAAAAA1");
    	        ServerSocket serverSocket = new ServerSocket(SERVERPORT);
    	        System.out.println("AAAAAAAAAAAAAAAA2");
    	        while (true) { 
    	            Socket client = serverSocket.accept();
    	          //写入坐标值
        			OutputStream os=client.getOutputStream(); 
        			OutputStreamWriter osw=new OutputStreamWriter(os);
        			BufferedWriter bw=new BufferedWriter(osw);
        			bw.write("服务器坐标信息:["+event_x+","+event_y+"]");
        			bw.close();
    	            }
    	        }catch(Exception e) {
    	         System.out.println("S: Error");
    	            e.printStackTrace();
    	        }  
    	}
    }

}
class MySurface extends SurfaceView implements SurfaceHolder.Callback{
	private SurfaceHolder holder;
	public MySurface(Context context) {
		super(context);
		holder= getHolder();
		holder.addCallback(this);
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		Canvas canvas=holder.lockCanvas();
		Paint paint=new Paint();
		paint.setColor(Color.RED);
		canvas.drawRect(10, 10, 150, 80, paint);
		paint.setColor(Color.WHITE);
		canvas.drawText("坐标测试区", 40, 30, paint);
		holder.unlockCanvasAndPost(canvas);
		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		// TODO Auto-generated method stub
		
	}
	
}


客户端代码:

public class MySocketClient extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
            Socket socket = new Socket("10.0.2.2", 8192);//注意这里也是和上面重定向的配置是有关系的。而且这里的地址必须是10.0.2.2
			InputStream is=socket.getInputStream();
			InputStreamReader isr=new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String msg=br.readLine();
			Toast.makeText(this, "获取服务器传来的坐标:"+msg,Toast.LENGTH_LONG).show();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }
}


启动服务端程序,启动客户端程序

注意:两个程序的AndroidManifest.xml都必须加上下面这个权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

如果想查看程序执行过程 :

在cmd中执行如下命令

执行 adb -s emulator-5554 shell
然后执行logcat,可以查看执行log信息


启动客户端:

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用WebRTC实现Android用户间的网络通信可以分为以下几个步骤: 1. 创建信令服务器:信令服务器用于交换会话描述协议(Session Description Protocol,SDP)和候选网络地址(ICE Candidate),以建立客户端之间的连接。在Android开发中,可以使用WebSocket协议或者HTTP服务器与客户端进行通信实现SDP和ICE交换。 2. 实现PeerConnection连接:使用WebRTC提供的PeerConnection API,建立客户端之间的连接,并进行数据传输。 3. 实现DataChannel连接:使用WebRTC提供的DataChannel API,建立客户端之间的数据传输通道,实现数据交换。 4. 实现界面交互:在Android应用中,实现界面交互,例如实现聊天界面、文件传输界面等。 需要注意的是,在实现WebRTC通信时,需要处理网络带宽、丢包、延迟等问题,以保证通信质量。同时,还需要处理Android系统相关的权限问题,例如网络权限、文件权限等。 以下是一个使用WebRTC实现Android用户间网络通信的简单实现: 1. 使用WebRTC库:在Android应用中集成WebRTC库,例如Google提供的WebRTC库。 2. 创建信令服务器:使用WebSocket协议或者HTTP服务器与客户端进行通信实现SDP和ICE交换。 3. 实现PeerConnection连接:使用WebRTC提供的PeerConnection API,建立客户端之间的连接,并进行数据传输。 4. 实现DataChannel连接:使用WebRTC提供的DataChannel API,建立客户端之间的数据传输通道,实现数据交换。 5. 实现界面交互:在Android应用中,实现界面交互,例如实现聊天界面、文件传输界面等。 6. 测试通信:通过连接信令服务器实现双方之间的数据传输。可以使用Android Studio中的模拟器进行测试,或者在两个真实的Android设备上进行测试。 总之,使用WebRTC实现Android用户间的网络通信需要掌握一定的网络通信知识,同时需要熟悉WebRTC的API和协议。开发者可以参考WebRTC官方文档,并结合自己的实际需求进行开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值