服务器收到消息加入数组,从聊天服务器发送到聊天客户端的数组更新

我发现了一个聊天服务器的代码,我有一个简短的问题。这是关于以下摘录:从聊天服务器发送到聊天客户端的数组更新

clientOutputStreams.add(作家);

显然,这种字符串数组应该被发送到聊天客户端,但我不明白怎么阵列不断被更新 - 即如何发送到由特殊的聊天客户端的服务器字符串数组中accumualated然后送回给所有聊天客户。你做?将不胜感激你的帮助。

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(); }

}

}

}

2017-10-17

Duke

+1

clientOutputStreams不是一个* strings *数组,而是一个* streams * =>数组,即给客户端的“管道”。 –

+0

是否意味着如果总共有10个客户端,那么clientOutputStream的大小是10? –

+0

是的,就是这样。每次接受客户端连接时,该列表都会增长。正如下面的答案所述,每次在控制台上写入一个字符串时,它都会一次向客户端广播一个字符串。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值