mccae
Senfdazugeber
Grüße!
Leider habe ich folgendes Problem und ich weiß auch nicht ob das java oder linux-spezifisch ist:
Wenn ich einen DatagramSocket erstelle (dabei ist es egal ob ich den parameterlosen konstruktor benutze, oder auf InetAddress und port binde, oder auf eine InetSocketAddress).
Es ist auch egal ob ich auf die Adresse "127.0.0.1", "localhost", "0.0.0.0", oder auf die IP über die der Server aus dem Internet erreichbar ist binde.
Folgendes:
Ich möchte ein Datagrampacket schicken (an localhost, habe es aber auch mit Adressen aus dem Internet probiert).
Ich bekomme jedoch keine Antwort (timeout).
Das komische: Unter Windows funktioniert alles perfekt egal ob ich einen lokalen oder einen gameserver im internet ansteuere.
Auf meinem Linux Server (Debian 5.0 lenny) klappt das ganze jedoch nicht.
Die entsprechenden Ports sind freigegeben,...
Hier mal mein Code:
Nochmal ganz kurz zur Erklärung:
TeeWorlds ist ein 2D Cartoonshooter.
Der obige Code soll den Status eines TeeWorlds - servers erfahren der auf 127.0.0.1 läuft. Ich habe es aber auch mit anderen Servern im Internet probiert.
Unter Windows funktioniert alles ohne Probleme, nur unter Linux kann anscheinend weder unter localhost pakete empfangen, noch welche die von außerhalb kommen,...
Auf wenn ich probeweise die Firewall ausschalte und alle Ports öffne (ich weiß, böse!) bekomme ich keine Antwort,...
Entweder landet das gesendete Paket im Nirvana oder ich kann einfach keine Empfangen,...
Kann mir jemand weiterhelfen?
Leider habe ich folgendes Problem und ich weiß auch nicht ob das java oder linux-spezifisch ist:
Wenn ich einen DatagramSocket erstelle (dabei ist es egal ob ich den parameterlosen konstruktor benutze, oder auf InetAddress und port binde, oder auf eine InetSocketAddress).
Es ist auch egal ob ich auf die Adresse "127.0.0.1", "localhost", "0.0.0.0", oder auf die IP über die der Server aus dem Internet erreichbar ist binde.
Folgendes:
Ich möchte ein Datagrampacket schicken (an localhost, habe es aber auch mit Adressen aus dem Internet probiert).
Ich bekomme jedoch keine Antwort (timeout).
Das komische: Unter Windows funktioniert alles perfekt egal ob ich einen lokalen oder einen gameserver im internet ansteuere.
Auf meinem Linux Server (Debian 5.0 lenny) klappt das ganze jedoch nicht.
Die entsprechenden Ports sind freigegeben,...
Hier mal mein Code:
Java:
package at.co.lipski.twcc.network;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.ArrayList;
import at.co.lipski.twcc.logic.Time;
public class TWServerQuery {
private int timeout;
private int port;
private DatagramSocket socko;
public TWServerQuery(){
port = 8303;
timeout = 5000;
}
public TWServerQuery(int port, int timeout, DatagramSocket socko){
if(port>1024){
this.port = port;
}
else{
this.port = 8303;
}
if(timeout > 0){
this.timeout = timeout;
}
else{
this.timeout = 5000;
}
this.socko = socko;
}
public synchronized TeeWorldsStatus doQuery(){
TeeWorldsStatus s = null;
try{
socko.setSoTimeout(timeout);
byte[] sendData;
byte[] receiveData = new byte[1024];
String sentence = "ÿÿÿÿÿÿÿÿÿÿgief";
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("127.0.0.1"), port);
System.out.println("Sending packet: "+sendPacket.getAddress().toString()+" "+sendPacket.getPort()+" "+sendPacket.getLength());
socko.send(sendPacket);
System.out.println("Packet sent!");
DatagramPacket receivePacket = new DatagramPacket(receiveData, 1024);
System.out.println("Receiving,...");
socko.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
int index = modifiedSentence.indexOf("info")+4;
String [] infos = modifiedSentence.substring(index).split(""+(char)0);
String version = infos[0];
String serverName= infos[1];
String map = infos[2];
String gametype = infos[3];
String percentDone = infos[5];
String numPlayers = infos[6];
String maxplayers = infos[7];
ArrayList<String[]> l = new ArrayList<String[]>();
if(infos.length>7){
for(int i = 8;i<infos.length;i+=2){
String [] array = new String[2];
array[0] = infos[i];
array[1] = infos[i+1];
l.add(array);
}
}
s = new TeeWorldsStatus();
s.setVersion(version);
s.setServerName(serverName);
s.setMap(map);
s.setGametype(gametype);
s.setPercentDone(percentDone);
s.setNumPlayers(numPlayers);
s.setMaxplayers(maxplayers);
s.setPlayers(l);
}
catch (Exception e){
boolean truetrue = false;
boolean isbound = false;
String addr = "";
if(socko==null){
truetrue = true;
}
else{
isbound = socko.isBound();
addr = ""+socko.getLocalAddress()+socko.getLocalPort();
}
System.out.println(Time.genTimeStamp()+"Internal error: "+e.getMessage()+
"\n\nIs DatagramSocket null? "+truetrue+"\nIs bound: "+isbound+"\n"+addr+"\n");
e.printStackTrace();
}
return s;
}
}
Nochmal ganz kurz zur Erklärung:
TeeWorlds ist ein 2D Cartoonshooter.
Der obige Code soll den Status eines TeeWorlds - servers erfahren der auf 127.0.0.1 läuft. Ich habe es aber auch mit anderen Servern im Internet probiert.
Unter Windows funktioniert alles ohne Probleme, nur unter Linux kann anscheinend weder unter localhost pakete empfangen, noch welche die von außerhalb kommen,...
Auf wenn ich probeweise die Firewall ausschalte und alle Ports öffne (ich weiß, böse!) bekomme ich keine Antwort,...
Entweder landet das gesendete Paket im Nirvana oder ich kann einfach keine Empfangen,...
Kann mir jemand weiterhelfen?