SDIS FEUP MIEEC programming test solutions. Necessary tools for developing a UDP multicast and TCP client-server in Java.
A huge thanks to ZeD4805. All the Java source code was (almost) a direct copy of his solutions.
For UDP the local network ip should be 230.0.0.0 and ports over 5000.
InetAddress multiCast_address = InetAddress.getByName(String ip);
InetSocketAddress inetSocketAddress = new InetSocketAddress(InetAddress multiCast_address, int multicast_port);
MulticastSocket multicast_socket = new MulticastSocket(int multicast_port);
multicast_socket.joinGroup(multiCastAddress);
DatagramPacket datagramPacket = new DatagramPacket(new byte[1000], 1000, inetSocketAddress); //Create packet to store data
multicastSocket.receive(DatagramPacket datagramPacket); //Wait for packet
String data = new String(datagramPacket.getData()); //Create string from byte array packet
To convert from string to bytes a charset needs to be chosen. Include import java.nio.charset.*; and use StandardCharsets.UTF_8 .
byte[] msgBytes = s.getBytes(StandardCharsets.UTF_8); //Create byte array from string
DatagramPacket datagramPacket = new DatagramPacket(byte[] msgBytes, int msgBytes.length,InetSocketAddress group); //Create packet
multicastSocket.send(DatagramPacket datagramPacket); //Send packet
For TCP the local ip should be 127.0.0.1 and ports over 5000.
Normal socket:
Socket socket = new Socket(String server_ip, int port);
Server socket:
ServerSocket server_socket = new ServerSocket(int port);
A server socket waits until a sockets tries to connect to it:
Socket socket = server_socket.accept();
DataStream are the streams used for the read and write operations
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
Read and write functions have several versions for different variable types.
Read:
int received = in.readInt();
Write:
float avg = 10.15;
out.writeFloat(avg);
Throws an exception after timeout ms without response :
socket.setSoTimeout(int timeout);
try{
...
}
catch (SocketException eTimeout) {
...
}
socket.close();
Check if socket is already available:
while(socket.isClosed());
Work while the socket is connected:
while(socket.isConnected()){
...
}
Thread t = new Thread() {
public void run() {
...
}
}
t.start();
Thread.sleep(int period);
Integer:
int number = Integer.parseInt(String str);
Float:
float number = Float.parseFloat(String str);
System.out.println("Something: " + data);
for (String s : Arrays.copyOfRange(String[] args, int starting_element , int args.length)){
...
}