从套接字

时间:2018-04-12 19:17:50

标签: java sockets

我正在为聊天客户端 - 服务器应用程序编写一个测试,我创建了10个套接字 - 每个套接字都会向其他9个套接字发送消息,这会触发服务器通过ExecutorService创建10个线程并发送消息。它需要花费一些时间才能发送所有10 * 9 = 90条消息,但是如何验证所有10个线程都已完成此作业(线程没有终止它们继续运行)。我想知道是否有可能总量从套接字收到的行并等待那个条件,直到每个套接字到达9个收到的消息,如果不是我怎么办呢?另外我不应该修改客户端和聊天代码,但是我可以自由地在测试中写任何东西,这里是我如何创建10个套接字并将消息发送到服务器,该服务器是从课程开始的:

  for (int i = 0; i < 10; i++) {
        try {
        Socket socket = new Socket("127.0.0.1", 3000);
        allsockets.add(socket);
        final PrintWriter stream = new PrintWriter(socket.getOutputStream(), true);
        stream.println("someMessage");
        } catch (IOException e) {
        e.printStackTrace();
        }
     }

1 个答案:

答案 0 :(得分:0)

这是一个非常专业的问题,但考虑到您提供的信息,使用Variant变量可能是值得的。

volatile

使用关键字public static volatile int messagesReceived = 0; 意味着JVM使用lock  确保一次只有一个线程可以修改变量。

然后,每个套接字在完成工作后应该递增volatile个变量。一旦messagesReceived变量达到10,或者您产生的线程数,那么您肯定知道他们已经完成了这项工作。

messagesReceived

但是,根据您对套接字的实现,可能需要允许它们访问增加计数器变量的公共mutator方法。