0

我目前正在开发一台服务器多客户端系统。我正在尝试获取它,以便服务器可以通过 PrintWriter 发送一个命令,该命令将通过该套接字上连接的所有客户端。然而在实践中,该命令仅通过一个客户端。所有客户端都在一个套接字上创建,并且都使用相同的 Scanner。我正在尝试做的事情可能吗?

一些代码(以防有帮助)

套接字的创建:

serverSocketRefresh = new ServerSocket(PORTREFRESH);
refresh = serverSocketRefresh.accept();
Creation of the Print Writer and the Scanner:

networkOutputRefresh = new PrintWriter(refresh.getOutputStream(), true);
networkInput = new Scanner(refresh.getInputStream());

客户介绍:

do
{
    // Wait for client...

    client = serverSocket.accept();
    System.out.println("\nNew client accepted.\n");
    handler = new ClientHandler(client,networkOutputRefresh, itemArray, bidderArray);
    handler.start();
} while (true);

我试图传输给所有客户端的命令:

public static void updatePrice()
{   
    networkOutputRefresh.println("1");
}
4

2 回答 2

0

为什么不直接使用 BufferedReader 和 BufferedWriter,并在每次接受客户时创建一个新的?

编辑:或者,如果“1”是您将通过该套接字发送的唯一内容,则只需将其作为字节直接通过套接字发送。我相信该方法类似于socket.write(new byte[] { 1 }, 0, 1),并且在另一端读取socket.read(buffer, 0, 1),其中缓冲区是长度为 1 的字节数组。

于 2013-05-01T03:47:17.507 回答
0

我不确定我是否正确理解了您的代码,但似乎您使用的是客户端的单一引用。并且您的客户参考将持有最后一个客户参考,因此 printwrite 仅为该客户编写。理想情况下,如果您想向所有客户端发布某些内容,那么您应该拥有一组客户端引用。每当您在服务器套接字上获得接受时,将新的客户端引用添加到您的集合中。每当您必须向所有客户发布时,只需遍历您的客户集合并使用其关联的印刷作者进行发布。

于 2013-05-01T04:34:58.320 回答