【问题标题】:Thread and Multicast in Java returns me an ExceptionJava 中的线程和多播返回异常
【发布时间】:2015-01-26 09:00:03
【问题描述】:

我正在尝试实现一个简单的程序,它允许在虚拟 IP 地址上加入多播组并侦听发送到该 IP 的数据包(这就是我创建类 ThreadGroup 的原因)。

我的代码是:

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;



public class MulticastTest {
    private Set<Thread> threads;

    public MulticastTest(){
        threads = new HashSet<Thread>();
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        MulticastTest test = new MulticastTest();
        test.joinGroup("dogg",test.createAdr(),32445);

    }

    private void joinGroup(String name, String adr, int port){
          try {
              MulticastSocket multi = new MulticastSocket(port);
              multi.joinGroup(InetAddress.getByName(adr));
              ThreadGroup newThread = new ThreadGroup(multi);
              threads.add(newThread);
              newThread.start();
              System.out.println("Congrats you joined the group "+name+".");
          }catch (NumberFormatException | IOException e) {
              e.printStackTrace();
        }
      }

      private String createAdr(){
          Random r = new Random();
          return r.nextInt(16)+224 + "." + r.nextInt(256) + "." + (r.nextInt(255)+1) + "." + r.nextInt(56);
      }

    /**
     * Thread to receive datagram that are sent to the group
     */

    class ThreadGroup extends Thread {
        MulticastSocket multiSocket;

        public ThreadGroup(MulticastSocket m) throws IOException{
            multiSocket = m;
            start();
        }

        public void run() {
            DatagramPacket message;
            byte[] contMessage;
            String texte;

            while(true) {
                contMessage = new byte[1024];
                message = new DatagramPacket(contMessage, contMessage.length);
                try {
                    multiSocket.receive(message);
                    texte = (new DataInputStream(new ByteArrayInputStream(contMessage))).readUTF();
                    System.out.println(texte);
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    }

}

因此,我主要尝试连接到随机多播InetAddress 并等待数据包。但是当我运行我的程序时,我得到:

Exception in thread "main" java.lang.IllegalThreadStateException
    at java.lang.Thread.start(Thread.java:705)
    at MulticastTest.joinGroup(MulticastTest.java:35)
    at MulticastTest.main(MulticastTest.java:25)

有人可以向我解释我做错了什么吗?

【问题讨论】:

    标签: java multithreading sockets exception multicast


    【解决方案1】:

    您在线程上调用了两次start(),一次在构造函数中,一次在joinGroup() 中。从构造函数中删除 start() 应该让你通过 IllegalThreadSTateException

    【讨论】:

      【解决方案2】:

      你有两次启动线程。 1) 线程组构造函数 2) newThread.start();

      使用其中之一,您的问题可能会得到解决。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-28
        • 2012-02-17
        • 2015-08-31
        • 1970-01-01
        • 2018-06-16
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多