• 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("您好,您收到了来自服务器的祝福!
    ".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学习  

  • 相关阅读:
    JS-函数
    JS-数组
    JS-2
    课堂小技巧
    CSS利用filter/opacity实现背景透明
    [技巧心得] 背景半透明最佳实践
    Cadence Orcad 无法启动出现Capture.exe找不到cdn_sfl401as.dll问题
    正则表达式
    python小项目之头像右上角加数字
    Django开发之路 二(django的models表查询)
  • 原文地址:https://www.cnblogs.com/eniac1946/p/7597780.html
Copyright © 2020-2023  润新知