您的位置:首页 > 移动开发 > Android开发

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

代码:



服务程序代码:

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());
                   }
         }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: