zoukankan      html  css  js  c++  java
  • 使用Socket通信(二)

    这个socket有梗,主要是服务器端有梗,可能大家会碰到同样的问题,网上查了好久,这里分享一下解决办法.首先在第一个module建一个类SimpleServer,这个类就是服务端,建好之后在代码左边有一个运行按钮,直接点击运行即可,不用运行module.这样服务端运行到accept就会阻塞,直到有客户端跟他连接才会继续往下运行,服务端端口号用Tomcat的端口号.梗就在这里:运行之后报错:BindException: Address already in use: JVM_Bind网上查了好久原来是端口被占用发生了冲突,然后我把Tomcat关掉又好了,很纠结关掉Tomcat怎么使用客户端啊,网上这样解决:打开Tomcat,cmd然后输入netstat -ano找到占用Tomcat端口的PID

    我的是6728然后windows窗口底部任务栏右键打开任务管理器

    点击详细信息再点击PID按顺序查找,找到6728,然后右键终止程序,这时再运行服务端就不会报BindException: Address already in use: JVM_Bind错误了

    public class SimpleServer {
    
        public static void main(String[] args) throws IOException {
    
            //创建一个ServerSocket,用于监听客户端socket的连接请求
            ServerSocket ss=new ServerSocket(9999);
            //采用循环不断接受来自客户端的请求,服务器端也对应产生一个Socket
            while(true){
                Socket s=ss.accept();
                OutputStream os=s.getOutputStream();
                os.write("您好,您收到了服务器的新年祝福!
    ".getBytes("utf-8"));
                System.out.println("服务器");
                os.close();
                s.close();
            }
    
        }
    }

    点击左上角绿色三角运行服务端

    ///////////////

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            new Thread(){
                @Override
                public void run() {
                    super.run();
                    try {
                        Socket socket = new Socket("你的ip地址,cmd输入ipconfig查找", 9999);
                        //设置10秒之后即认为是超时
                        socket.setSoTimeout(10000);
                        BufferedReader br = new BufferedReader(new InputStreamReader(
                                socket.getInputStream()));
                        String line = br.readLine();
                        System.out.println("来自服务器的数据:" + line);
    
                        br.close();
                        socket.close();
    
                    } catch (UnknownHostException e) {
                        // TODO Auto-generated catch block
                        Log.e("UnknownHost", "来自服务器的数据");
                        e.printStackTrace();
                    } catch (IOException e) {
                        Log.e("IOException", "来自服务器的数据");
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
                }
            }.start();
    
    
        }
    }

    上面是另一个module的主activity,也就是客户端,输出信息代表接收到服务端发送的消息.不要忘了打开网络权限

  • 相关阅读:
    Linux下安装MySql8
    root与alias主要区别
    TCP/UDP 常用端口列表
    kafka文档
    kafka监测工具(可视化)
    Kafka消息队列
    postgresql
    gulp babel 配置不报错也没有输出结果的原因
    gulp中常用的模块
    判断浏览器标签页是隐藏或者显示状态
  • 原文地址:https://www.cnblogs.com/Ocean123123/p/10960227.html
Copyright © 2011-2022 走看看