for循环没有循环遍历字符串列表?

时间:2016-12-21 17:14:51

标签: java arrays string sockets networking

我(试图)提出一个小小的聊天提示,但它目前并没有按计划进行。

new Thread(new Runnable(){
        @Override
        public void run(){
            while (true){
                for (Socket s : s){
                    for (String str : receive(s)){
                        System.out.println("processing "+str);
                        if (str.startsWith("#reg")){
                            str = str.replaceAll("#reg", "");
                            registered.put(s.getInetAddress().toString(), str);
                            System.out.println("SERVER >> user "+str+" on "+s.getLocalAddress().toString()+" registered!");
                            send(s, "#confirmed");
                        }else{
                            sendToAll(registered.get(s.getLocalAddress().toString())+" >> "+str);
                        }
                    }
                }
            }
        }
    }).start();

就在这里我正在检查所有收到的消息。他们收到了这种方法。

public List<String> receive(Socket s){
    try{
        List<String> lines = new ArrayList<String>();
        InputStream is = s.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = br.readLine()) != null) {
            lines.add(line);
            System.out.println("SRECEIVE >> "+line);
        }
        return lines;
    }catch(Exception e){
        e.printStackTrace();
    }
    return null;
}

正在运行,控制台中会弹出一条带有“SRECEIVE&gt;&gt; msg”的消息。 但是线程(第一个代码)中的行System.out.println("processing "+str);没有弹出。 变量“s”是(连接)套接字的数组。 “接收(Socket s)”被调用的唯一时间是在那个线程^^。

1 个答案:

答案 0 :(得分:1)

因为此代码将继续运行

while ((line = br.readLine()) != null) {
            lines.add(line);
            System.out.println("SRECEIVE >> "+line);
        }

直到溪流关闭。

您需要在单独的线程中执行此操作。