代码之家  ›  专栏  ›  技术社区  ›  Winter

不应该将Solinger设置为假断开此连接吗?

  •  1
  • Winter  · 技术社区  · 6 年前

    据我所知,linger是一种设置,允许连接在关闭后保持一定的延迟,以便最终数据有时间读取。

    我有一个例子:

    @Ignore
    public class SocketTTest
    {
        @Test
        public void socketTest() throws Throwable
        {
            new Thread(() -> {
                try
                {
                    ServerSocket serverSocket = new ServerSocket(5555);
    
                    while(true)
                    {
    
                        //keep listening
                        Socket socket = serverSocket.accept();
                        socket.setSoLinger(false, 0);
    
                        InputStream in = socket.getInputStream();
    
                        System.out.println(in.read());
    
                        Thread.sleep(2000);
    
                        System.out.println(in.read());
    
                        in.close();
                        socket.close();
                        System.exit(0);
                    }
                }
                catch(Throwable ex)
                {
                    ex.printStackTrace();
                }
            }).start();
    
            Socket socket = new Socket("localhost", 5555);
            socket.setSoLinger(false, 0);
            OutputStream out = socket.getOutputStream();
            out.write(1);
            out.write(2);
            out.close();
            socket.close();
    
            synchronized(this)
            {
                wait();
            }
        }
    }
    

    以及输出

    1 
    2
    

    如何读取2?内衣已禁用,睡眠结束时插座不应处于不可读状态?

    1 回复  |  直到 6 年前
        1
  •  4
  •   user207421    6 年前

    setSoLinger() false

    close() setSoLinger(false, 0)