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.set, null);
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(host, port);
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();
}
}
}