2013-05-01 57 views
0

我目前正在一台服务器上运行多个客户端系统。我试图获得它,因此服务器可以通过PrintWriter发送一条命令,该命令将通过该套接字上连接的所有客户端。然而在实践中,命令只能通过一个客户端。所有客户端都在一个套接字上创建,并且都使用相同的扫描器。我正在尝试做什么?通过java中的套接字发送数据

一些代码(柜面它有助于)插槽

创作:

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

Ceation的客户:

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

在一个插座上连接了哪种不同的客户端? – 2013-05-01 03:56:17

回答

0

我不知道如果我正确地理解你的代码读取,但似乎你正在使用客户的单一参考。并且您的客户端引用将保存最后一个客户端引用,因此Printwrite只写入该客户端。理想情况下,如果您想向所有客户端发布内容,那么您应该拥有一组客户端引用。每当您在服务器套接字上获得接受权限时,都会将新客户端引用添加到您的集合中。无论何时您必须发布给所有客户端,只需遍历客户端集合并使用其关联的printwriters进行发布即可。

+0

这工作!非常感谢:) – user2254372 2013-05-01 07:50:40

0

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

编辑:或者,如果'1'是您通过该套接字发送的唯一信息,则直接通过套接字将其作为字节发送。我相信,该方法是一样的东西socket.write(new byte[] { 1 }, 0, 1),并在另一端,socket.read(buffer, 0, 1),其中缓冲区长度的字节数组1.

+0

这是一个关于套接字的uni项目,本教程明确告诉我们使用PrintWriters和扫描仪:/ – user2254372 2013-05-01 03:49:46

+0

@ user2254372啊,好的。 PrintWriters和Scanners应该可以工作,只要你为每个连接的客户端创建一个新的。 – AppleDash 2013-05-01 03:51:54

+0

他们没有办法与使用同一个扫描器写入多个线程的打印作家做到这一点吗? – user2254372 2013-05-01 03:52:02

相关问题