Guten Tag zusammen
Problem: Ich lese eine Datei ein und speichere deren Inhalt (IPort) in 2 Strings, einer für die IP und den anderen für den Port.
Ich vergleiche dann noch jedem Durchlauf wo ein Server einen Time out hatte das dieser nicht mehr genommen wird.
Das komische ist, er nimmt den lieben Server dann aber immer. :suspekt:
Trage ich aber nur einen Server in die Datei ein, bleibt er beim vergleich haengen und merkt das die IP und der Port gleich sind.
Hier mal der Code (Ich hab das Essenziele rot gefärbt):
Ausgabe:
Für Hilfe bin ich sehr dankbar, in meinen Augen stimmt der Code oder hab ich irgendwo nen Logikfehler oder sonst was Grobes vermasselt?
Problem: Ich lese eine Datei ein und speichere deren Inhalt (IPort) in 2 Strings, einer für die IP und den anderen für den Port.
Ich vergleiche dann noch jedem Durchlauf wo ein Server einen Time out hatte das dieser nicht mehr genommen wird.
Das komische ist, er nimmt den lieben Server dann aber immer. :suspekt:
Trage ich aber nur einen Server in die Datei ein, bleibt er beim vergleich haengen und merkt das die IP und der Port gleich sind.
Hier mal der Code (Ich hab das Essenziele rot gefärbt):
Code:
//******************************************************//
// usage: java -cp . UDPClient type(guid, dicom) amount timout (ms)
//******************************************************//
import java.net.*;
import java.io.*;
import java.util.Random;
class UDPClient {
public static void main (String args []) {
//Create object for UDP communication
NetworkStuff connection1 = new NetworkStuff();
connection1.getServerList();
connection1.setOptionsAndSendPacket(args[0], args[1]);
//Starting endless loop
do{
//Set options, send packet to the server and wait for answer
try{
connection1.receivePacket(Integer.parseInt(args[2]));
}
//For missing args[] we set here the arguments automaticly
catch(ArrayIndexOutOfBoundsException e){
connection1.setOptionsAndSendPacket(args[0], args[1]);
connection1.receivePacket(500);
}
}while(1==1);
}
}
class NetworkStuff{
//Some variables ;-)
byte [] buffer;
private InetAddress server;
private DatagramSocket socket;
private DatagramPacket packet;
private String host;
private String typeOfID;
private String amountOfID;
private String [] tmpHost;
private String [] tmpPort;
private int port;
private int anzZeilen;
//Used for the compare
private String host_old = "0.0.0.0";
private int port_old = 0;
void getServerList(){
// Get line number and input the server ip's
String thisLine;
// Get number of line in the server.txt
try {
BufferedReader in = new BufferedReader (new FileReader ("server.txt") );
try {
while( (thisLine = in.readLine()) != null ) {
anzZeilen++;
}
in.close();
} catch (IOException e) {
System.out.println("Read error " + e);
}
}
catch (IOException e) {
System.out.println("Open error " + e);
}
//Create for each entry in the server.txt two strings (1. server, 2. port)
tmpHost = new String [anzZeilen];
tmpPort = new String [anzZeilen];
// Input the server ip and port, line for line, split it in 2 strings (server and port)
try {
BufferedReader sTmp = new BufferedReader ( new FileReader ("server.txt") );
for(int y = 0; y < anzZeilen;y++){
String elements [] = sTmp.readLine().split(":");
tmpHost[y] = elements[0];
tmpPort[y] = elements[1];
}
sTmp.close();
}
catch (FileNotFoundException e) {}
catch(IOException e){ System.out.println(e); }
}
void choiceServer(){
// Random choice of a server and check to take a other server for this try
int genNumFinal = 0;
Random genNumTmp = new Random();
do{
genNumFinal = Math.abs(genNumTmp.nextInt() % anzZeilen)+ 0;
host = tmpHost[genNumFinal];
port = Integer.parseInt(tmpPort[genNumFinal]);
}while(host_old.equals(tmpHost[genNumFinal]) == true && port_old == Integer.parseInt(tmpPort[genNumFinal]));
//Set host_old to compare that a server is not used two times in a row
host_old = host;
port_old = port;
}
void setOptionsAndSendPacket(String typeOfID, String amountOfID){
// Get host for transmitting
choiceServer();
buffer = new byte[1024];
try{
// Create a Datagram Socket
socket = new DatagramSocket();
// Create a packet with server information
String myMessage = typeOfID + ":" + amountOfID;
buffer = myMessage.getBytes("US-ASCII");
// Set host and port
server = InetAddress.getByName(host);
packet = new DatagramPacket(buffer, buffer.length, server, port);
// Send the packet and reset the buffer
socket.send(packet);
buffer = new byte[1024];
}
catch(UnknownHostException e){ System.out.println(e); }
catch(IOException e){ System.out.println(e); }
}
void receivePacket(int timeout){
// receive request from client and get client info
try {
System.out.println("Waiting for answer from: " +host + ":" + port);
System.out.println("Old Host " + host_old + "" +"Old Port: " + port_old);
packet = new DatagramPacket(buffer, buffer.length);
socket.setSoTimeout(timeout);
socket.receive(packet);
// output the data from the server
System.out.println(new String(buffer).trim());
}
catch (IOException e) {
System.out.println("time out");
setOptionsAndSendPacket(typeOfID, amountOfID);}
}
}
Ausgabe:
Waiting for answer from: 62.2.3.3:123
Old Host 62.2.3.3 Old Port: 123
time out
Waiting for answer from: 62.2.3.3:123
Old Host 62.2.3.3 Old Port: 123
time out
Waiting for answer from: 62.2.3.3:123
Old Host 62.2.3.3 Old Port: 123
time out
Waiting for answer from: 62.2.3.3:123
Old Host 62.2.3.3 Old Port: 123
Für Hilfe bin ich sehr dankbar, in meinen Augen stimmt der Code oder hab ich irgendwo nen Logikfehler oder sonst was Grobes vermasselt?
Zuletzt bearbeitet: