1、android 模拟器和PC相互通信(IP +端口+ socket)
实现方法:android socket
① 服务程序运行在PC端
② 客户端程序运行在android模拟器
实现形式:由android 模拟器向服务程序发出消息,然后服务程序会送消息至模拟器。
注意要点:
一、 服务程序在PC端,需要指定电脑的端口,以提供数据访问的渠道。
二、 客户端程序需要同样的端口 以及 PC的ip地址进行socket联络
三、 数据通信用进程方式实现,可以支持多个客户端访问
四、 代码层面:
1、 AndroidManifest.xml需要添加
2、 android:name="android.permission.INTERNET" />
以提供网络访问权限支持
2、 部分模拟器版本和android-SDK版本不匹配,此时去掉AndroidManifest.xml中的
3、目,运行于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 4、
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; 5、
}
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.getInputSt 6、ream()));
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 7、 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 8、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;
imp 9、ort 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 extends Activity {
10、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 mEditText = null;
private Button mButton = null;
/** Called when the activity is first created. */
@Ove 11、rride
public void 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);
12、
// 登陆
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); // 13、创建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.readL 14、ine(); // 接收来自服务器的消息
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());
}
}
}






