当前位置:文档之家› android x86模拟器和PC相互通信(socket)

android x86模拟器和PC相互通信(socket)

android 模拟器和PC相互通信(IP +端口+ socket) 实现方法:android socket
①服务程序运行在PC端
②客户端程序运行在android模拟器
实现形式:由android 模拟器向服务程序发出消息,然后服务程序会送消息至模拟器。

注意要点:
一、服务程序在PC端,需要指定电脑的端口,以提供数据访问的渠道。

二、客户端程序需要同样的端口以及PC的ip地址进行socket联络
三、数据通信用进程方式实现,可以支持多个客户端访问
四、代码层面:
1、AndroidManifest.xml需要添加
<uses-permission android: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 .ServerSocket;
import .Socket;
public class PCServer {
public static void main(String a[]) {
new ServerThread(5554).start();
}
}
class ServerThread extends Thread {
private int Port;
private ServerSocket serversocket = null;
private Socket client;
ServerThread(int port) {
Port = port;
}
public void run() {
try {
serversocket = new ServerSocket(Port);
while (true) {
client = serversocket.accept();
System.out.println("server accept");
try {
// 接收客户端消息
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("read:" + str);
// 向服务器发送消息
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),
true);
out.println("MSG from server:Your message(" + str + ")has been successfully sent!");
// 关闭输入输出流
out.close();
in.close();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
// 关闭客户端
client.close();
System.out.println("server close");
}
}
} 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 .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.EditT ext;
import android.widget.T extView;
public class MyClientActivity extends Activity {
private final String DEBUG_TAG = "Activity01";
private static String IpAddress = "10.141.31.85";
private static int Port = 5554;
private TextView mTextView = null;
private EditText mEditT ext = null;
private Button mButton = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.main);
mButton = (Button) findViewById(R.id.Button01);
mTextView = (TextView) findViewById(R.id.TextView01);
mEditText = (EditText) findViewById(R.id.EditText01);
// 登陆
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
sendMsg();
}
});
}
public void sendMsg() {
Socket socket = null;
String message = mEditText.getText().toString() + "\r\n";
try {
socket = new Socket(IpAddress, Port); // 创建Socket
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out.println(message); // 向服务器发送消息
String msg = in.readLine(); // 接收来自服务器的消息
if (msg != null)
mTextView.setT ext(msg);
else
mTextView.setT ext("数据错误!");
// 关闭流
out.close();
in.close();
// 关闭Socket
socket.close();
} catch (Exception e) {
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
}
}
}。

相关主题