上文移动端搭建Http Server(一)—— 总述中主要对本系列内容作了综述,本文会对Http Server有一个简单的架构,包括:
①设计一个SimpleHttpServer组件
②监听端口并简单向请求者返回信息
③使用telnet来检验结果
1.Android Studio新建一个项目,这里命名为AndroidServer
2.增加SimpleHttpServer,在其中增加启动服务器和停止服务器
在线程中开启ServerSocket
/**
* 启动Server(异步)
*/
public void startAsync(){
mIsEnable = true;
new Thread(new Runnable() {
@Override
public void run() {
doProcessASync();
}
}).start();
}
doProcessASync方法具体处理逻辑
private void doProcessASync() {
try {
InetSocketAddress socketAddr = new InetSocketAddress(mWebConfig.getPort());
mSocket = new ServerSocket();
mSocket.bind(socketAddr);
while (mIsEnable) {
// accept是一个阻塞的方法,当有连接时才会返回Socket值
final Socket remotePeer = mSocket.accept();
// 每当有一个接入时就放到线程池中处理
mTreadPool.submit(new Runnable() {
@Override
public void run() {
Log.d("an-server", "a remote peer accepted" + remotePeer.getRemoteSocketAddress());
onAcceptRemotePeer(remotePeer);
}
});
}
} catch (IOException e) {
Log.e("an-server", e.toString());
}
}
上面每接收到一个客户端连接过来就放入线程池中,这样处理多个客户端连接情况。
在onAcceptRemotePeer给客户端一个回执:
/**
* 处理连接后的操作
* @param remotePeer
*/
private void onAcceptRemotePeer(Socket remotePeer) {
try {
remotePeer.getOutputStream().write("connected success".getBytes());
} catch (IOException e) {
Log.e("an-server", e.toString());
}
}
3.用telnet检验结果
- 先在模拟器中运行项目
- 然后打开cmd 输入telnet localhost 5554,出现
需要输入一个授权,授权是在
C:\Users\Administrator\.emulator_console_auth_token
用编辑器打开,拷贝其中的值,然后输入auth
可以看到授权成功
- 然后做一个端口映射,把本地的8088端口映射到模拟器的8088端口,这样就可以直接访问本机的8088端口来测试
redir add tcp:8088:8088
8088端口映射成功了!
再打开一个cmd窗口,输入
telnet localhost 8088
,运行成功。也可以用真机测试,查看手机ip为192.168.1.104,
运行telnet 192.168.1.104 8088
,结果如图
这篇就到这里,下篇中在实现功能前我们还需要了解一下HTTP协议的相关知识移动端搭建Http Server(三)—— HTTP协议讲解
github源码地址:https://github.com/jianiuqi/AndroidServer