我目前在一台服务器上工作很多客户端系统。我试图得到它,以便服务器可以通过PrintWriter发送一个命令,该命令将通过该套接字上连接的所有客户端。但是在实践中,命令只会传递给一个客户端。所有客户端都在一个套接字上创建,并且都使用相同的扫描程序。我正在尝试做什么?
一些代码(包括它有帮助)
创建套接字:
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");
}
答案 0 :(得分:0)
为什么不使用BufferedReader和BufferedWriter,每次接受客户端时都要换一个新的?
编辑:或者,如果'1'是你将通过该套接字发送的唯一内容,只需将其作为一个字节直接通过套接字发送。我相信该方法类似于socket.write(new byte[] { 1 }, 0, 1)
,并且在另一端读取socket.read(buffer, 0, 1)
,其中buffer是长度为1的字节数组。
答案 1 :(得分:0)
我不确定我是否正确理解您的代码,但似乎您使用的是客户端的单个引用。并且您的客户端引用将持有最后一个客户端引用,因此printwrite仅为该客户端编写。理想情况下,如果要向所有客户端发布内容,则应该有一组客户端引用。当您在服务器套接字上获得接受时,将新的客户端引用添加到您的集合中。每当您必须发布到所有客户端时,只需迭代您的客户端集合并使用其关联的打印机进行发布。