Java ServerSocket有时会随机接收客户端数据

时间:2017-11-30 00:03:13

标签: java sockets server java.util.scanner inputstream

我正在编写一个基本的HTTP服务器来托管一些文件。一路上我想测试服务器是否正在接收客户端数据。使用以下代码,抛出NoSuchElementException异常。扫描仪无法从客户端接收线路,即使它在大多数情况下也是如此。这是代码:

import java.net.*;
import java.io.*;
import java.util.*;
import java.nio.file.*;

public class Simple {


    @SuppressWarnings("empty-statement")
    public static void main(String[] args) {
        try{
            ServerSocket ss = new ServerSocket(80);
            while(true){
                try{
                    Socket sock = ss.accept();
                    InputStream in = sock.getInputStream();
                    OutputStream out = sock.getOutputStream();
                    out.write("HTTP/1.1 200 OK\r\nContent-type:text/html;charset=utf-8\r\n\r\n".getBytes());
                    Scanner sc = new Scanner(in);
                    out.write(sc.nextLine().getBytes());
                    sock.close();
                } catch(Exception ex){
                    System.err.println(ex);
                }
            }
        } catch(Exception ex){
            ex.printStackTrace();
        }
    }

}

发生这种情况时,客户端连接会在连接断开或服务器最终收到客户端数据之前等待很长时间。任何帮助表示赞赏。

不,这不是This question的副本。 (这是两个单独的问题)。

1 个答案:

答案 0 :(得分:0)

您需要在Scanner.hasNextLine()之前调用Scanner.nextLine(),否则肯定会引发此异常。它与套接字无关:它是Scanner. NB Java ServerSocket *never* receives data. An accepted Socket`在服务器端执行的定义行为。