通过java中的套接字发送数据

时间:2013-05-01 03:44:10

标签: java sockets networking

我目前在一台服务器上工作很多客户端系统。我试图得到它,以便服务器可以通过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");
}

2 个答案:

答案 0 :(得分:0)

为什么不使用BufferedReader和BufferedWriter,每次接受客户端时都要换一个新的?

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

答案 1 :(得分:0)

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