151 lines
3.2 KiB
Java
151 lines
3.2 KiB
Java
package tools;
|
|
import java.net.InetAddress;
|
|
import java.net.SocketException;
|
|
import java.net.Socket;
|
|
import java.net.DatagramSocket;
|
|
import java.net.UnknownHostException;
|
|
import java.io.IOException;
|
|
|
|
/** Class to store hostnames + ports
|
|
* @author Louis Royer
|
|
* @author Flavien Haas
|
|
* @author JS Auge
|
|
* @version 1.0
|
|
*/
|
|
public class HostItem {
|
|
private String hostname;
|
|
private int port;
|
|
private Socket tcpSocket;
|
|
private DatagramSocket udpSocket;
|
|
private InetAddress inetAddress;
|
|
|
|
/** Constructor with hostname and port
|
|
* @param hostname Hostname
|
|
* @param port Port
|
|
*/
|
|
public HostItem(String hostname, int port) {
|
|
this.port = port;
|
|
this.hostname = hostname;
|
|
}
|
|
|
|
/** Get TCP Socket.
|
|
* @return TCP Socket
|
|
*/
|
|
public Socket getTCPSocket() {
|
|
if (tcpSocket == null) {
|
|
try {
|
|
tcpSocket = new Socket(InetAddress.getByName(hostname), port);
|
|
} catch (SocketException e) {
|
|
System.err.println("Error: No TCP socket available.");
|
|
System.exit(-1);
|
|
} catch (UnknownHostException e) {
|
|
System.err.println("Error: Unknown host.");
|
|
System.exit(-1);
|
|
} catch (IOException e) {
|
|
System.err.println("Error: Cannot create TCP socket");
|
|
System.exit(-1);
|
|
}
|
|
}
|
|
return tcpSocket;
|
|
}
|
|
|
|
/** Closes tcp socket
|
|
*/
|
|
public void closeTCPSocket() {
|
|
if (tcpSocket != null) {
|
|
try {
|
|
tcpSocket.close();
|
|
} catch (IOException e2) {
|
|
System.err.println("Error: cannot close socket");
|
|
}
|
|
}
|
|
tcpSocket = null;
|
|
}
|
|
|
|
/** Get UDP Socket
|
|
* return UDP Socket
|
|
*/
|
|
public DatagramSocket getUDPSocket() {
|
|
if (udpSocket == null) {
|
|
try {
|
|
udpSocket = new DatagramSocket();
|
|
udpSocket.connect(InetAddress.getByName(hostname), port);
|
|
} catch (SocketException e) {
|
|
System.err.println("Error: No UDP socket available.");
|
|
System.exit(-1);
|
|
} catch (UnknownHostException e) {
|
|
System.err.println("Error: Unknown host.");
|
|
System.exit(-1);
|
|
}
|
|
}
|
|
return udpSocket;
|
|
}
|
|
|
|
/** Closes udp socket
|
|
*/
|
|
public void closeUDPSocket() {
|
|
if (udpSocket != null) {
|
|
udpSocket.close();
|
|
}
|
|
udpSocket = null;
|
|
}
|
|
|
|
/** Getter for hostname */
|
|
public String getHostname() {
|
|
return hostname;
|
|
}
|
|
|
|
/** Getter for port */
|
|
public int getPort() {
|
|
return port;
|
|
}
|
|
|
|
/** To string
|
|
* @return String representation
|
|
*/
|
|
public String toString() {
|
|
return getHostname() + " (port " + getPort() + ")";
|
|
}
|
|
|
|
/** Override of equals method
|
|
* @param other Object to test equality with
|
|
* @return true if equals
|
|
*/
|
|
public boolean equals(Object other) {
|
|
boolean result = false;
|
|
if (other instanceof HostItem) {
|
|
HostItem that = (HostItem) other;
|
|
result = this.getHostname() == that.getHostname() && this.getPort() == that.getPort();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/** Override of hashCode method
|
|
* @return a hash code for this object.
|
|
*/
|
|
public int hashCode() {
|
|
return hostname.hashCode() ^ port;
|
|
}
|
|
|
|
public InetAddress getInetAddress() {
|
|
if (inetAddress == null) {
|
|
try {
|
|
inetAddress = InetAddress.getByName(getHostname());
|
|
} catch (UnknownHostException e) {
|
|
System.err.println("Error: Unknown host.");
|
|
System.exit(-1);
|
|
}
|
|
}
|
|
return inetAddress;
|
|
}
|
|
|
|
public HostItem(Socket s) {
|
|
tcpSocket = s;
|
|
inetAddress = s.getInetAddress();
|
|
hostname = inetAddress.getCanonicalHostName();
|
|
port = s.getPort();
|
|
}
|
|
|
|
|
|
}
|