android 模拟器和PC相互通信
2012-06-15 16:29
260 查看
android模拟器和PC相互通信(IP+端口+ socket)
实现方法:android socket
① 服务程序运行在PC端
② 客户端程序运行在android模拟器
实现形式:由android 模拟器向服务程序发出消息,然后服务程序会送消息至模拟器。
注意要点:
一、服务程序在PC端,需要指定电脑的端口,以提供数据访问的渠道。
二、客户端程序需要同样的端口 以及 PC的ip地址进行socket联络
三、数据通信用进程方式实现,可以支持多个客户端访问
四、代码层面:
1、 AndroidManifest.xml需要添加
<uses-permissionandroid:name="android.permission.INTERNET" />
以提供网络访问权限支持
2、 部分模拟器版本和android-SDK版本不匹配,此时去掉AndroidManifest.xml中的
<uses-sdk android:minSdkVersion="15" />就不会报错。
3、 PC的IP为实际上外网的IP,即,IPV4。通过命令行cmd,ipconfig查询即可。
代码:
服务端:Java项目,运行于PC:
Package: com.android.server
name:ServerThread
客户端:android项目,运行于android模拟器
package :com.android.client
name:MyClientActivity
代码:
服务程序代码:
客户端程序代码:
实现方法:android socket
① 服务程序运行在PC端
② 客户端程序运行在android模拟器
实现形式:由android 模拟器向服务程序发出消息,然后服务程序会送消息至模拟器。
注意要点:
一、服务程序在PC端,需要指定电脑的端口,以提供数据访问的渠道。
二、客户端程序需要同样的端口 以及 PC的ip地址进行socket联络
三、数据通信用进程方式实现,可以支持多个客户端访问
四、代码层面:
1、 AndroidManifest.xml需要添加
<uses-permissionandroid:name="android.permission.INTERNET" />
以提供网络访问权限支持
2、 部分模拟器版本和android-SDK版本不匹配,此时去掉AndroidManifest.xml中的
<uses-sdk android:minSdkVersion="15" />就不会报错。
3、 PC的IP为实际上外网的IP,即,IPV4。通过命令行cmd,ipconfig查询即可。
代码:
服务端:Java项目,运行于PC:
Package: com.android.server
name:ServerThread
客户端:android项目,运行于android模拟器
package :com.android.client
name:MyClientActivity
代码:
服务程序代码:
package com.android.server; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class PCServer { publicstatic void main(String a[]) { newServerThread(5554).start(); } } class ServerThread extends Thread { privateint Port; privateServerSocket serversocket = null; privateSocket client; ServerThread(intport) { Port= port; } publicvoid run() { try{ serversocket= new ServerSocket(Port); while(true) { client= serversocket.accept(); System.out.println("serveraccept"); try{ //接收客户端消息 BufferedReaderin = new BufferedReader( newInputStreamReader(client.getInputStream())); Stringstr = in.readLine(); System.out.println("read:"+ str); //向服务器发送消息 PrintWriterout = new PrintWriter(new BufferedWriter( newOutputStreamWriter(client.getOutputStream())), true); out.println("MSGfrom server:Your message(" + str + ")has been successfullysent!"); //关闭输入输出流 out.close(); in.close(); }catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); }finally { //关闭客户端 client.close(); System.out.println("serverclose"); } } }catch (Exception e) { System.out.println(e.getMessage()); } } }
客户端程序代码:
package com.android.client; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MyClientActivity extendsActivity { privatefinal String DEBUG_TAG = "Activity01"; privatestatic String IpAddress = "10.141.31.85"; privatestatic int Port = 5554; privateTextView mTextView = null; privateEditText mEditText = null; privateButton mButton = null; /**Called when the activity is first created. */ @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton= (Button) findViewById(R.id.Button01); mTextView= (TextView) findViewById(R.id.TextView01); mEditText= (EditText) findViewById(R.id.EditText01); //登陆 mButton.setOnClickListener(newOnClickListener() { publicvoid onClick(View v) { sendMsg(); } }); } publicvoid sendMsg() { Socketsocket = null; Stringmessage = mEditText.getText().toString() + "\r\n"; try{ socket= new Socket(IpAddress, Port); //创建Socket PrintWriterout = new PrintWriter(new BufferedWriter( newOutputStreamWriter(socket.getOutputStream())), true); BufferedReaderin = new BufferedReader(new InputStreamReader( socket.getInputStream())); out.println(message); // 向服务器发送消息 Stringmsg = in.readLine(); //接收来自服务器的消息 if(msg != null) mTextView.setText(msg); else mTextView.setText("数据错误!"); //关闭流 out.close(); in.close(); //关闭Socket socket.close(); }catch (Exception e) { //TODO: handle exception Log.e(DEBUG_TAG,e.toString()); } } }
相关文章推荐
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- android socket编程——两个模拟器间的通信(一台PC)
- Android 模拟器 PC电脑通信
- Android 模拟器 PC电脑通信
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- android虚拟机实现于本地PC相互通信
- Android进阶(三)-------PC和Android模拟器相互访问及模拟器之间tcp/udp通信
- Android基础教程之----SMS简单发送短信程序(两个模拟器之间的通信)!
- Android通过USB与PC通信
- Android开发入门之建立能与访问者进行相互通信的本地服务
- android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序!
- android 模拟器访问PC
- Android通过串口与PC通信
- 电脑 (PC) Android 模拟器 - Genymotion 上安装 apk
- Android_主线程与子线程之间相互通信
- 热更新--android与lua相互通信++++++++what
- Android作为客户端,PC作为服务端:实现网络通信
- Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- Android客户端与PC服务器实现Socket通信(wifi)