zoukankan      html  css  js  c++  java
  • ServerSocket类的常用方法

    1.accept:侦听并接受此套接字的连接;此方法在连接传入之前一直阻塞。

    2.setSoTimeout(timeout)方法的作用时设置超时时间,通过指定超时timeout值启用/禁用超时功能,以ms为单位。

      必须在进入阻塞前调用这个方法,才能生效,一旦超时,程序会触发SocketTimeoutException异常;默认值是0即永远等待。

    Server.java

    package com.company.s7;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    
    public class Server {
        public static void main(String[] args) {
            try {
                ServerSocket serverSocket=new ServerSocket(8000);
                System.out.println(serverSocket.getSoTimeout());
                serverSocket.setSoTimeout(4000);
                System.out.println(serverSocket.getSoTimeout());
                System.out.println();
    
                System.out.println("begin "+System.currentTimeMillis());
                serverSocket.accept();
                System.out.println(" end "+System.currentTimeMillis());
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    Client.java

    package com.company.s7;
    
    import java.io.IOException;
    import java.net.Socket;
    
    public class Client {
        public static void main(String[] args) {
            try {
                System.out.println("client begin "+System.currentTimeMillis());
                Socket socket=new Socket("localhost",8000);
                System.out.println("client end "+System.currentTimeMillis());
            }catch (IOException e){
                e.printStackTrace();
                System.out.println("catch "+System.currentTimeMillis());
            }
        }
    }

    backlog参数含义:

    允许接受客户端连接请求的个数。

    如果队列已满,则拒接该连接。

    blacklog参数如果小于等于0,则使用默认值50;

    Server.java

    package com.company.s71;
    
    import javax.sound.midi.Soundbank;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        public static void main(String[] args) throws IOException, InterruptedException {
            ServerSocket serverSocket=new ServerSocket(8088,3);
    
            //sleep(5000)的作用是不让ServerSocket调用accept()方法,
            //而是由客户端Socket先发奇10个连接请求
            //然后在执行accept方法时只能接收3个连接
            Thread.sleep(5000);
    
            System.out.println("accept1 begin");
            Socket socket1=serverSocket.accept();
            System.out.println("accept1 end");
    
            System.out.println("accept2 begin");
            Socket socket2=serverSocket.accept();
            System.out.println("accept2 end");
    
            System.out.println("accept3 begin");
            Socket socket3=serverSocket.accept();
            System.out.println("accept3 end");
    
            System.out.println("accept4 begin");
            Socket socket4=serverSocket.accept();
            System.out.println("accept4 end");
    
            System.out.println("accept5 begin");
            Socket socket5=serverSocket.accept();
            System.out.println("accept5 end");
    
            socket1.close();
            socket2.close();
            socket3.close();
            socket4.close();
            socket5.close();
    
            serverSocket.close();
        }
    }

    Client.java

    package com.company.s71;
    
    import java.io.IOException;
    import java.net.Socket;
    
    public class Client {
        public static void main(String[] args) throws IOException {
            Socket socket1=new Socket("localhost",8088);
            Socket socket2=new Socket("localhost",8088);
            Socket socket3=new Socket("localhost",8088);
            Socket socket4=new Socket("localhost",8088);
          //  Socket socket5=new Socket("localhost",8088);
    
        }
    }

    先启动server.java,然后快速的启动client.java;

    但是让我很奇怪的是服务端启动五秒之后,再启动客户端,反而能正确的执行;

    如果由知道的人,请留言区告知,谢谢。

  • 相关阅读:
    windows8安装docker(tool box)
    windows8 使用docker创建第一个nodejs运行环境
    nodejs使用fetch获取WebAPI
    Nodejs获取Azure Active Directory AccessToken
    使用Bot Service创建Bot Framework
    安装Team Services Agent Win7
    Nodejs微信与Bot framework通过Direct Line连接
    修改cmd默认启动路径
    less配置
    javascript滚动到大于一定距离显示隐藏
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/11111659.html
Copyright © 2011-2022 走看看