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) に LAN でパケットを送信しようとすると、メッセージは正常に送信されましたが、「s.receive(pack);」RecvMsg 関数のコマンドは返されず、プログラムを永久にブロックします。IP 192.168.1.3 のコンピューターで Wireshark を使用したところ、パケットが宛先コンピューターに転送されたことがわかります。、ファイアウォール、または...問題がない可能性があります。誰でも助けることができますか?