Java MulticastSocket.receive从不返回

Java MulticastSocket.receive从不返回,java,multicast,Java,Multicast,我正在尝试使用java开发一个多播应用程序。这是我的密码: 这是Lamport.Java文件: package dsass2; import java.net.*; import java.io.*; public class Lamport { static int Current_Time; static int Time_Interval; static String Multicast_Group; static int port; static MulticastSocket s;

我正在尝试使用java开发一个多播应用程序。这是我的密码:

这是Lamport.Java文件:

package dsass2;
import java.net.*;
import java.io.*;
public class Lamport
{
static int Current_Time;
static int Time_Interval;
static String Multicast_Group;
static int port;
static MulticastSocket s;

static public int SendMsg(byte[] sending)
{
    DatagramPacket pack;
    try{
        pack = new DatagramPacket(sending, sending.length,InetAddress.getByName(Multicast_Group), port);
    }
    catch(UnknownHostException uhe){
        System.out.println("UnknownHostException Occured in SendMsg! "+uhe);
        return 0;
    }
    try{
        s.send(pack);
    }
    catch(IOException io){
        System.out.println("IOException Occured in SendMsg! "+io);
    }
    catch(NullPointerException npe){
       System.out.println("You Must Initialize Lamport Logical Clock First! ");
       return 0;
    }
    return 1;
}

static public int RecvMsg(byte[] recived)
{
   DatagramPacket pack = new DatagramPacket(recived, recived.length);
   try{

       s.receive(pack);
   }
   catch(IOException io){
       System.out.println("IOException Ocurred in RecvMsg! " + io);
       return 0;
   }
   catch(NullPointerException npe){
       System.out.println("You Must Initialize Lamport Logical Clock First! ");
       return 0;
   }
   return 1;
}

static public int Initialize(String mcastip, int port, int timeinterval)
{
    try{
    s=new MulticastSocket(port);
    }
    catch(IOException io)
    {
        System.out.println("IOException Ocurred in Initialize! " + io);
    }
    try{
        s.joinGroup(InetAddress.getByName(mcastip));
    }
    catch(UnknownHostException uhe){
         System.out.println("UnknownHostException Ocurred in Initialize! " + uhe);
    }
    catch(IOException io){
        System.out.println("IOException Ocurred in Initialize! " + io);
    }
    Multicast_Group=mcastip;
    Time_Interval=timeinterval;
    Thread Logical_Clock = new Thread(Clock_Incrementer);
    Logical_Clock.start();
    return 1;//it means no error occured.
}

static public int GetCurrentClock()
{
    return Current_Time;
}

Lamport () //Cunstructor
{
    Current_Time=0;
}

static Runnable Clock_Incrementer=new Runnable()
{
    public void run()
    {
        while(true){
            Current_Time+=Time_Interval;
              try{
                  Thread.sleep(1000);
              }
              catch(InterruptedException ie){
                  System.out.println("Logical Clock thread interrupted! " + ie);
              }
        }
    }
};
}
这是我的main.java文件:

package dsass2;
import java.util.Scanner;

public class Main {
public static void main(String[] args){
    Scanner user_input=new Scanner(System.in);

    int voroodi=0;

    byte[] message=new byte[1024];

    while(voroodi!=5){

        System.out.println("What do you want to do?\n1. Initialize Lamport Logical Clock\n2. Send a message\n3. Recieve a message\n4. Get Current Clock\n5.Exit From Program");

        voroodi=Integer.parseInt(user_input.next());

        switch(voroodi){
            case 1:
                System.out.println("Please Enter Multicast Group IP:");
                String group=user_input.next();
                System.out.println("Please Enter Port Number:");
                int port=Integer.parseInt(user_input.next());
                System.out.println("Please Enter Time interval:");
                Lamport.Initialize(group, port, Integer.parseInt(user_input.next()));
                break;
            case 2:
                System.out.println("Please Enter Your Message:");
                String Msg=user_input.next();
                Lamport.SendMsg(Msg.getBytes());
                break;
            case 3:
                System.out.println("Please Wait for a Message...");
                if(Lamport.RecvMsg(message)==1)
                {
                    System.out.println("New Message Recieved:");
                    System.out.println(message.toString());
                }
                break;
            case 4:
                System.out.printf("Current Time is: %d\n", Lamport.GetCurrentClock());
                break;
            case 5:
                System.exit(0);
                break;
            default:
                System.exit(0);
                break;
        }
    }
    System.exit(0);
}
}
初始化后,当我尝试从一台计算机IP:192.168.1.2向局域网中的另一台计算机IP:192.168.1.3发送数据包时,消息发送成功,但s.receivepack;RecvMsg函数中的命令不会返回,并且会永久阻止程序。 我在IP为192.168.1.3的计算机中使用了wireshark,我可以看到传输到目标计算机的数据包!,所以可能没有防火墙,或者。。。问题
有人能帮忙吗?

两台主机之间有路由器吗?如果是,它是否配置为允许多播?不,它们之间没有路由器。计算机通过电缆连接。