Android Socket Transference R&D

Android To PC

Client-Android:

其实懂得了PC to PC, 到了Android,只要知道要进行重定向,就OK了。

P.S. 

在Android下, “127.0.0.1”或者local 代表Android Device, (默认定义,无法修改)

“10.0.2.2”在Android里指的是 pc 端。

127.0.0.1”或者local 在pc,也指pc本地。

好现在我们看看怎么重定向?

(一)PC —Server  Android—Client

PC —Server:   

final int SERVER_PORT = 12345;

// mapping PC port 12555 with Simulator port 12345.

Runtime.getRuntime().exec(“adb forward tcp:12555 tcp:12345);

//

ServerSocket serverSocket = new ServerSocket(12345);

Android –Client:

Host: 10.0.2.2(PC端)   port:12345

(二) PC—Client   Android—Server

PC — Client:

// mapping PC port 12581 with Simulator port 6666.

Runtime.getRuntime().exec(“adb forward tcp:12581 tcp:6666);

serverAddr = InetAddress.getByName(“127.0.0.1”);

socket = new Socket(serverAddr, 12581);// 此处的12581是PC开放的端口,已重定向到Device的6666端口

Android — Server:

Port: 6666

代码如下:

Client-Android:

package hf.socket.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.app.AlertDialog;

import android.app.Dialog;

import android.content.DialogInterface;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

public class ActivityMain extends Activity {

private TextView txtRecord;

private EditText input;

private String host = “10.0.2.2”;

private int port = 5556;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

input = (EditText) findViewById(R.id.input);

txtRecord = (TextView) findViewById(R.id.txtRecord);

findViewById(R.id.btnSubmit).setOnClickListener(

new View.OnClickListener() {

@Override

public void onClick(View v) {

txtRecord.append(“\n” + “client:”

input.getText().toString());

socketTo(input.getText().toString());

}

});

findViewById(R.id.btnSetHost).setOnClickListener(

new View.OnClickListener() {

@Override

public void onClick(View v) {

showDialog(0);

}

});

setTitle(“Socket to “ + host + “:” + port);

}

@Override

protected Dialog onCreateDialog(int id) {

final View v = View.inflate(this, R.layout.setnull);

final EditText inputHost = (EditText) v.findViewById(R.id.inputHost);

final EditText inputPort = (EditText) v.findViewById(R.id.inputPort);

return new AlertDialog.Builder(this)

.setTitle(“Config ServerHost”)

.setView(v)

.setPositiveButton(“Set”,

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface arg0, int arg1) {

host = inputHost.getText().toString();

port = Integer.parseInt(inputPort.getText()

.toString());

setTitle(“Socket to “ + host + “:” + port);

}

}).create();

}

private final void socketTo(final String msg) {

Socket socket = null;

try {

socket = new Socket(hostport);

Log.d(“”“socker connect”);

// send msg

PrintWriter out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(socket.getOutputStream())), true);

out.println(msg);

// receive response

BufferedReader br = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

String response = br.readLine();

if (response != null) {

txtRecord.append(“\n” + “server:” + response);

else {

txtRecord.append(“\n” + “no response from server”);

txtRecord.append(“\n” + “——–close——–“);

}

// close connection

out.close();

br.close();

socket.close();

catch (Exception e) {

Log.e(“”, e.getMessage());

}

}

}

PC  — Server:

package socketServer;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class TestIIServer implements Runnable {

private ServerSocket server;

private Socket client;

public static void main(String[] args) {

new Thread(new TestIIServer()).start();

}

@Override

public void run() {

try {

// mapping PC port 12555 with Simulator port 12345.

Runtime.getRuntime().exec(“adb forward tcp:12555 tcp:12345”);

//

System.out.println(“s: connecting…”);

ServerSocket serverSocket = new ServerSocket(12345);

while (true) {

Socket client = serverSocket.accept();

System.out.println(“s: receiving…”);

try {

BufferedReader in = new BufferedReader(

new InputStreamReader(client.getInputStream()));

String str = in.readLine();

System.out.println(“s: received:'” + str + “‘”);

PrintWriter out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(client.getOutputStream())), true);

out.println(“s: received:'” + str + “‘”);

catch (Exception e) {

System.out.println(“s: error”);

e.printStackTrace();

finally {

client.close();

System.out.println(“s:done”);

}

}

catch (Exception e) {

System.out.println(“s:error”);

e.printStackTrace();

}

}

}

上一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *