手记

将Android端作为服务器,用PC端或其他为客户端

public class MainActivity extends AppCompatActivity {

    private SimpleHttpServer shs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebConfiguration wed = new WebConfiguration(8078, 50);
        shs = new SimpleHttpServer(wed);
        shs.startAsync();

    }

    @Override
    protected void onDestroy() {
        try {
            shs.stopAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
        super.onDestroy();
    }

public class SimpleHttpServer {
    private final ExecutorService threadPoob;
    private boolean isEnable;
    private WebConfiguration web;
    private ServerSocket socket;
    private Socket remotePeer;


    public SimpleHttpServer(WebConfiguration  web){
        this.web=web;
        threadPoob = Executors.newCachedThreadPool();
    }
    public void startAsync(){
        isEnable=true;
        new Thread(new Runnable() {
            @Override
            public void run() {
                doProcSync();
            }
        }).start();
    }
    public void stopAsync() throws IOException {
        if(!isEnable){
            return;
        }
        isEnable=false;
        if(socket!=null){
            socket.close();
            socket=null;
        }
    }

    private void doProcSync() {

        try {
            InetSocketAddress socketaddress=new InetSocketAddress(web.getPort());
            socket=new ServerSocket();
            socket.bind(socketaddress);
            while (isEnable){
                otePeer = socket.accept();
                threadPoob.submit(new Runnable() {
                    @Override
                    public void run() {
                        onAcceptRemotePeer(remotePeer);

                    }
                });
            }
        } catch (IOException e) {
            Log.e("doProcSync",e.toString());
            e.printStackTrace();
        }
    }

    private void onAcceptRemotePeer(Socket remotePeer) {
        try {
            InputStream inputStream = remotePeer.getInputStream();
            String headerLine=null;
            while ((headerLine=StreamToolkit.reabLing(inputStream))!=null){
                    if(headerLine.equals("\r\n")){
                        return;
                    }
                    Log.e("spy",headerLine);
            }
            Log.e("---","成功");
        } catch (IOException e) {
            Log.e("onAcceptRemotePeer",e.toString());
        }
    }
}
class StreamToolkit {
    public static String reabLing(InputStream inputStream) throws IOException {
        int c1=0;
        int c2=0;
        StringBuilder sb=new StringBuilder();
        while (c2!=-1&&!(c1=='\r'&&c2=='\n')){
            c1=c2;
            c2=inputStream.read();
            sb.append((char) c2);
        }
        if(sb.length()!=0){
            return sb.toString();
        }
        return null;
    }
}
    private int maxParallels;
    public WebConfiguration(int port,int maxParallels){
        this.port=port;
        this.maxParallels=maxParallels;
    }
    public void setPort(int port){
        this.port=port;
    }
    public void setMaxParallels(int maxParallels){
        this.maxParallels=maxParallels;
    }
    public int getPort(){
        return this.port;
    }
    public int getMaxParallels(){
        return this.maxParallels;
    }
}
3人推荐
随时随地看视频
慕课网APP