使用手机搭建服务器,使用同一网段电脑访问

来源:互联网 发布:索尼产品培训专员 知乎 编辑:程序博客网 时间:2024/05/13 18:56
传输层协议可以分为TCP与UDP,下面分别介绍下这两种协议的特点。
TCP(Transmission Control Protocol):
1.面向连接
2.传输可靠
3.速度慢(传输效率低)
4.面向字节流
UDP(User Data Protocol):
1.无连接
2.传输不可靠
3.速度快(传输效率高)

4.面向报文

TCP与UDP的连接图解


应用场景


TCP的三次握手、四次挥手图


下面使用TCP连接实现手机搭建微服务器,使用同一网段的电脑通过命令来远程访问,必须是同一网段才可以访问。如在终端界面telnet 192.168.1.134 8088
工程结构

定义一个网页配置类

package com.dzt.androidservice;/** * Created by on 2016/9/20. */public class WebConfiguration {//端口号private int port;//最大监听数private int maxParallels;public int getPort() {return port;}public void setPort(int port) {this.port = port;}public int getMaxParallels() {return maxParallels;}public void setMaxParallels(int maxParallels) {this.maxParallels = maxParallels;}@Overridepublic String toString() {return "WebConfiguration{" +"port=" + port +", maxParallels=" + maxParallels +'}';}}
定义一个Http服务器类
package com.dzt.androidservice;import android.util.Log;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/** * Created by on 2016/9/20. */public class SimpleHttpServer {private static String TAG = "SimpleHttpServer";private boolean isEnable;private WebConfiguration webConfig;private ServerSocket socket;private ExecutorService threadPool;public SimpleHttpServer(WebConfiguration webConfig){this.webConfig = webConfig;//创建一个线程池threadPool = Executors.newCachedThreadPool();}/** * 启动Server(异步) */public void startAsync(){isEnable = true;new Thread(new Runnable() {@Overridepublic void run() {doProcSync();}}).start();}private void doProcSync() {InetSocketAddress socketAddr = new InetSocketAddress(webConfig.getPort());try {socket = new ServerSocket();socket.bind(socketAddr);while (isEnable){final Socket remotePeer = socket.accept();Future future =  threadPool.submit(new Runnable() {@Overridepublic void run() {Log.i(TAG, "a remote peer accepted..." + remotePeer.getRemoteSocketAddress().toString());onAcceptRemotePeer(remotePeer);}});//如果任务结束返回nullLog.i(TAG, "future = " + future.get());}}catch (Exception e) {e.printStackTrace();}}private void onAcceptRemotePeer(Socket remotePeer) {try {remotePeer.getOutputStream().write("congratulations, connected successful".getBytes());}catch (Exception e) {e.printStackTrace();}}/** * 停止Server(异步) */public void stopAsync(){threadPool.shutdownNow();if(!isEnable)return ;isEnable = false;try {if(!socket.isClosed()){socket.close();}socket = null;}catch (IOException e) {e.printStackTrace();}}}
调用方法

package com.dzt.androidservice;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {private SimpleHttpServer shs;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);WebConfiguration wc = new WebConfiguration();wc.setPort(8088);wc.setMaxParallels(50);shs = new SimpleHttpServer(wc);shs.startAsync();}@Overrideprotected void onDestroy() {super.onDestroy();shs.stopAsync();}}
电脑与手机连接上同一Wifi后,在电脑终端上输入

终端上的IP是通过手机-设置-状态来查看的


打印

这个打印以在以下函数中

private void doProcSync() {InetSocketAddress socketAddr = new InetSocketAddress(webConfig.getPort());try {socket = new ServerSocket();socket.bind(socketAddr);while (isEnable){final Socket remotePeer = socket.accept();Future future =  threadPool.submit(new Runnable() {@Overridepublic void run() {Log.i(TAG, "a remote peer accepted..." + remotePeer.getRemoteSocketAddress().toString());onAcceptRemotePeer(remotePeer);}});//如果任务结束返回nullLog.i(TAG, "future = " + future.get());}}catch (Exception e) {e.printStackTrace();}}

源码下载:http://download.csdn.net/detail/deng0zhaotai/9636711


1 0
原创粉丝点击