Repository navigation
Expand file tree
/
Copy pathMulticastingGroup.java
More file actions
114 lines (104 loc) · 4.06 KB
/
Copy pathMulticastingGroup.java
File metadata and controls
114 lines (104 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package networking.casting;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;
import java.util.Scanner;
import java.util.StringTokenizer;
/**
*
* @author rafiul islam
*/
public class MulticastingGroup {
/**
* Class-D IP address are made for Multi-Casting
* Range: (224.0.0.0 - 239.255.255.255)
* Where 224.0.0.0 used for NID and 239.255.255.255 for subnet musk
* Use between them except them.
*/
public static void main(String[] args) {
int port = -1;
InetAddress host = null;
System.out.print("Your Name: ");
Scanner scan = new Scanner(System.in);
String userName = scan.nextLine();
if(args.length == 2){
try{
host = InetAddress.getByName(args[0]);
port = Integer.parseInt(args[1]);
} catch(UnknownHostException ex){
System.err.println(ex);
}
}
else{
try{
host = InetAddress.getByName("230.120.1.2");
port = 9696;
} catch(UnknownHostException ex){
System.err.println(ex);
}
}
try{
MulticastSocket mlSenderSocket = new MulticastSocket();
MulticastSocket mlReceiverSocket = new MulticastSocket(port);
mlReceiverSocket.joinGroup(host);
byte[] receiverBytes;
byte[] senderBytes;
/**
* Reading Thread will always read from receiver datagram packet
*/
receiverBytes = new byte[1024];
new Thread(new Runnable(){
public void run(){
DatagramPacket receiverPacket = new DatagramPacket(receiverBytes,
receiverBytes.length);
String receivedMessage;
while(!mlReceiverSocket.isClosed()) {
try{
mlReceiverSocket.receive(receiverPacket);
receivedMessage = new String(receiverPacket.getData(), 0,
receiverPacket.getLength());
StringTokenizer st = new StringTokenizer(receivedMessage,":");
if(st.nextElement().equals(userName)){
continue;
}
System.out.println(receivedMessage);
} catch(IOException ex){
System.err.println(ex);
}
}
}
}).start();
DatagramPacket senderPacket;
/**
* Greeting Message Send
*/
String yourMessage = userName+" join";
senderBytes = (userName+": "+yourMessage).getBytes();
senderPacket = new DatagramPacket(senderBytes, senderBytes.length,host,port);
mlSenderSocket.send(senderPacket);
/**
* Regular message send
*/
while(!mlSenderSocket.isClosed()){
yourMessage = scan.nextLine();
if(yourMessage.equalsIgnoreCase("exit")){
senderBytes = (userName+": "+"Exited").getBytes();
senderPacket = new DatagramPacket(senderBytes, senderBytes.length,host,port);
mlSenderSocket.send(senderPacket);
mlReceiverSocket.leaveGroup(host);
mlReceiverSocket.close();
mlSenderSocket.close();
}
else{
senderBytes = (userName+": "+yourMessage).getBytes();
senderPacket = new DatagramPacket(senderBytes, senderBytes.length,host,port);
mlSenderSocket.send(senderPacket);
}
}
} catch (IOException ex) {
System.err.println(ex);
}
}
}