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

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值