Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TCP套接字_Java_Sockets_Tcp_Inputstream - Fatal编程技术网

Java TCP套接字

Java TCP套接字,java,sockets,tcp,inputstream,Java,Sockets,Tcp,Inputstream,尝试从套接字读取InputStream时遇到阻塞问题。以下是服务器端的代码: public static void main(String[] args) throws Exception { if (args.length != 1) { throw new IllegalArgumentException("Parameter : <Port>"); } int port = Integer.parseInt(args[0]); // R

尝试从套接字读取InputStream时遇到阻塞问题。
以下是服务器端的代码:

public static void main(String[] args) throws Exception {
    if (args.length != 1) {
        throw new IllegalArgumentException("Parameter : <Port>");
    }

    int port = Integer.parseInt(args[0]); // Receiving port

    ServerSocket servSock = new ServerSocket(port);
    String s;
    Socket clntSock = servSock.accept();
    System.out.println("Handling client at "
            + clntSock.getRemoteSocketAddress());
    in = new BufferedReader(
            new InputStreamReader(clntSock.getInputStream()));
    out = new PrintWriter(clntSock.getOutputStream(), true);

    while (true) {
        s = in.readLine();
        System.out.println("s : " + s);
        if (s != null && s.length() > 0) {
            out.print(s);
            out.flush();
        }
    }
}

readLine方法正在阻止运行上述代码的客户端线程。我怎样才能避免这个问题?谢谢你的帮助

readLine方法正在阻止运行上述代码的客户端线程。我怎样才能避免这个问题


readLine是一种阻塞操作。如果您使用多个线程,这不一定是个问题。

您在客户机上使用的是
readLine()
,该客户机希望行以EOL标记结尾,但您的服务器端代码没有写入EOL标记。使用
println()
而不是
print()

要支持并发客户端,您需要在服务器上分离线程以处理接受的连接:

while (true) {
    // Accept a connection
    Socket socket = servSock.accept();

    // Spin off a thread to deal with the client connection
    new SocketHandler(socket).start();
}

研究如何使用多线程服务器/客户端。看到和,你在读台词,但不是在写台词。
while (true) {
    // Accept a connection
    Socket socket = servSock.accept();

    // Spin off a thread to deal with the client connection
    new SocketHandler(socket).start();
}