Android之socket多线程(二)

使用ServerSocket创建服务器端:

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//创建一个ServerSo查看特,用于监听客户端Socket的连接请求
ServerSocket ss=new ServerSocket(3000);
while(true){
//每当接收到客户端Socket的请求,服务器端也对应产生一个Socket,没接收到请求就等待。。
Socket s=ss.accept();
OutputStream os=s.getOutputStream();//服务器端产生的Socket获取输出流
os.write("您好,您收到了来自服务器的祝福!\n".getBytes());
os.close();
s.close();
}
}

客户端使用Socket通信:
测试环境是PC端服务器,手机当客户端,PC和手机要连接同一个局域网,PC和手机在同一网段

package com.example.simpleclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException; import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView; public class MainActivity extends Activity {
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView) findViewById(R.id.text);
new Thread(){ @Override
public void run() {
// TODO Auto-generated method stub try {
//建立连接到远程服务器的的Socket,Ip是服务器端PC的IP,测试环境是PC端服务器,手机当客户端,PC和手机要连接同一个局域网,PC和手机在同一网段
Socket socket = new Socket("192.168.88",3000);
//将Socket对应的输入流包装秤BufferedReader
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=br.readLine();
text.setText("来自服务的数据:"+line);
br.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }.start();
}
}

补充:用ADB shell来检查网络状态

Android之socket多线程(二)

方法:Windows平台

1. cmd cd到adb.exe安装路径,通常是xxx/sdk/platform-tools

2. 输入adb shell

3. netstat

4. 查看指定端口占用 netstat -aon|findstr "8630"

查看PID对应进程 tasklist|findstr "2014"

以上列表中state状态说明
LISTEN 侦听来自远方的TCP端口的连接请求[4]
SYN-SENT 在发送连接请求后等待匹配的连接请求[4]
SYN-RECEIVED 在收到和发送一个连接请求后等待对方对连接请求的确认[4]
ESTABLISHED 代表一个打开的连接[4]
FIN-WAIT-1 等待远程TCP连接中断请求,或先前的连接中断请求的确认[4]
FIN-WAIT-2 从远程TCP等待连接中断请求[4]
CLOSE-WAIT 等待从本地用户发来的连接中断请求[4]
CLOSING 等待远程TCP对连接中断的确认[4]
LAST-ACK 等待原来的发向远程TCP的连接中断请求的确认[4]
TIME-WAIT 等待足够的时间以确保远程TCP接收到连接中断请求的确认[4]
CLOSED 没有任何连接状态[4]

详情参考:android通过执行netstat及cat /proc/net/tcp查看正在运行应用的本地端口号pid和uid以及对方的IP和端口号

ADB shell命令:ADB Shell学习  

上一篇:MySQL5.7密码安全策略(转)


下一篇:Android开发之多线程下载、断点续传、进度条和文本显示