以下为转发工具代码:
前提:前置机为服务端,app为客户端.以下代码可以直接用,如果前置机和app都是客户端,则需要改转发工具总的客户端端为服务端,即可.
该转发工具的应用场景:
1.当手机需要通过USB连接前置机的,并采用socket通信的时候使用
应用原理:
就是建立双向通道, 转发工具其实就是两个服务端或者一个客户端一个服务端拼接起来,建立双向通信通道,供连接的两端进行数据流交互使用.
package com.pemt.sockettools;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ServerSocket serverSocket1 =null;
Socket socket1 =null;
int inputPort=1234;
int outPutPort=3131;//和掌机连接的端口
InetAddress address1 =null;
InetAddress address2 =null;
private static final String TAG = "MainActivity";
SharedPreferences sp ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor edit = sp.edit();
edit.putString("exception","");
edit.commit();
init();
}
private void init() {
initView();
sp = PreferenceManager.getDefaultSharedPreferences(this);
Log.e(TAG, "init:-------------------------------------- " );
run();
}
private void run() {
new Thread(new Runnable() {
Socket socket2=null;
@Override
public void run() {
try {
socket2 =new Socket("127.0.0.1",1234);//和前置机
Log.e(TAG, "init:----------------------try---------------- ");
// ServerSocket serverSocket2 = new ServerSocket(1234);//和前置机
serverSocket1 =new ServerSocket(outPutPort, 2);//和统一版APP 默认同时连接两个客户端.
Log.e(TAG, "init: 服务端.......");
serverSocket1.setReuseAddress(true); //设置 ServerSocket 的选项
System.out.println("服务器即将启动,等待客户端的链接=====>");
Log.e(TAG, "服务器即将启动,等待客户端的链接=====>" );
//记录客户端的数量
int count = 0 ;
// while (true){
Log.e(TAG, "run: ...........");
socket1 = serverSocket1.accept();//阻塞,等待客户端请求
// socket2 = serverSocket2.accept();//阻塞,等待客户端请求
Log.e(TAG, "等待客户端请求" );
//创建一个新的线程
MyThread serverThread = new MyThread(socket1, socket2,Main