使用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("您好,您收到了来自服务器的祝福! ".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来检查网络状态
方法: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学习