繁体   English   中英

java SocketServer如何工作?

[英]how java SocketServer works?

我是Java新手,我无法理解void go()方法的while循环部分。accept()方法等待客户端请求连接到服务器,所以为什么其他语句(如Print writer等)却不被执行?

其他语句是否在while循环中等待accept()方法运行?

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


 public class VerySimpleChatServer
 {
ArrayList clientOutputStreams;

public class ClientHandler implements Runnable {
    BufferedReader reader;
    Socket sock;

    public ClientHandler(Socket clientSOcket) {
        try {
            sock = clientSOcket;
            InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(isReader);

        } catch (Exception ex) { ex.printStackTrace(); }
    }

    public void run() {
        String message;
        try {
            while ((message = reader.readLine()) != null) {
                System.out.println("read " + message);
                tellEveryone(message);
            }
        } catch (Exception ex) { ex.printStackTrace(); }
    }
}

public static void main(String[] args) {
    new VerySimpleChatServer().go();
}

public void go() {
    clientOutputStreams = new ArrayList();
    try {
        ServerSocket serverSock = new ServerSocket(5000);
        while(true) {
            Socket clientSocket = serverSock.accept();
            PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
            clientOutputStreams.add(writer);

            Thread t = new Thread(new ClientHandler(clientSocket));
            t.start();
            System.out.println("got a connection");
        }
    } catch (Exception ex) { ex.printStackTrace(); }
}

public void tellEveryone(String message) {
    Iterator it = clientOutputStreams.iterator();
    while (it.hasNext()) {
        try {
            PrintWriter writer = (PrintWriter) it.next();
            writer.println(message);
            writer.flush();
        } catch (Exception ex) { ex.printStackTrace(); }
    }
}
}

没头绪,请帮忙

该接受方法不只是等待

执行仅在该方法返回时才继续! “执行流”在那里停止-直到该方法调用返回之前,以下语句才是无关紧要的。

这就是全部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM