我最近开始学习android,目前正在edx.org学习Java基础知识。我正在创建一个聊天应用程序(客户端/服务器)。现在,我要做的就是在任何新用户连接时向所有用户显示“用户已连接”消息。我将每个用户的输出流保存在ArrayList中。
1-可以吗?我应该存储完整的套接字吗?
第二,起初我的服务器端代码如下
int serverPort = 11223;
List<PrintWriter> clientsOut = new ArrayList<PrintWriter>();
ServerSocket serverSocket = new ServerSocket(serverPort);
System.out.println("Listening...");
while(true) {
try (
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
)
{
out.println("Hello from server");
clientsOut.add(out);
String ID = clientSocket.getInetAddress().getHostName();
for (PrintWriter client : clientsOut)
{
client.println("user(" + ID + ") : connected");
}
} catch (Exception e) {
System.out.print("ERROR : " + e.getMessage());
}
我意识到除了新连接的客户端之外,没有人收到有关自己已连接的消息。问题是输出流被关闭,因为它们在( )
之后的圆括号try
中声明try块之后会自动关闭它们。
我只是将放在方括号中的代码放在try
的花括号中,并且一切正常,但是我始终保持打开状态连接所有用户的输出流。
2-可以吗?循环阵列以发送消息时,是否应该重新打开每个连接的客户端的IO流?
谢谢