My server class is unable to extract the ACKACK message that was sent from the client, even though the client was able to receive and extract the message sent by the server (ACK).
when the client sends (ACKACK) the console prints the statement (client name) is connected, which is only suppose to be printed once before the ACK is taking place.
public class MultiThreadServer {
public static void main (String [] args) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(6666);
while (true) {
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
System.out.println("FTP Server starting at host: " + InetAddress.getLocalHost().getHostName() +
", waiting to be contacted for transferring files...");
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String message = new String(receivePacket.getData());
InetAddress clientAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
System.out.println(clientAddress.getHostName()+ " has started the connection");
// Create a new thread to handle the client connection
Thread t = new Thread(new ClientHandler(serverSocket, clientAddress, clientPort));
t.start();
} //!!DO NOT TOUCH WHILE(TRUE)
}//MAIN METHOD
}//SERVER
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ClientHandler implements Runnable {
private DatagramSocket serverSocket;
private InetAddress clientAddress;
private int clientPort;
public ClientHandler(DatagramSocket serverSocket, InetAddress clientAddress, int clientPort) {
this.serverSocket = serverSocket;
this.clientAddress = clientAddress;
this.clientPort = clientPort;
}
public void run() {
try {
String ACK = "ACK";
Frame sendFrame = new Frame(clientAddress, "ACK", "", 0, ACK.length(), ACK.getBytes());
Frame.sendFrame(serverSocket, sendFrame, clientPort, clientAddress);
while(true) {
// receive acknowledgement from client
Frame receiveFrame = Frame.receiveFrame(serverSocket, clientAddress, clientPort);
String clientACK = new String(receiveFrame.getBody());
System.out.println("Acknowledgement from client: " + clientACK.trim());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}