android 模拟器和PC相互通信

本文介绍了如何使用Android模拟器与PC进行通信,主要通过Socket实现。服务端程序在PC上运行,客户端程序在Android模拟器中运行。通信过程包括模拟器向服务端发送消息,服务端响应并返回消息。关键点在于设置正确的IP和端口,确保Android应用拥有INTERNET权限,并处理不同模拟器和SDK版本的兼容问题。代码示例分别展示了服务端的Java项目和客户端的Android项目代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());
                   }
         }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值