Hallo,
ich wäre euch dankbar wenn ihr mir einen Tip geben könntet. Ich betreibe eine Client/Server Kommunikation über Sockets. Im LAN läuft das Ganze richtig performant, ermögliche ich aber einem externen Client die Kommunikation über NAT geht der Durchsatz total krachen. Für eine 70MB Datei benötigt er eine anderthalbe Stunde.
Ich habe jetzt schon so ziemlich alles probiert und bin mittlerweile an dem Punkt angekommen an dem ich den NATenden Rechner verdächtige. Habt ihr noch eine Idee für mich die ich verfolgen kann?
Schnipsel Server:
Der ObjectStreamProcess mapt eingehende Objekte um und connectiert auf einen RMI-Server, ich weiss das die Serialisierung nicht gerade das Schnellste ist, aber wie gesagt, im LAN läuft es recht flott.
ClientSchnipsel:
Grüße Marcel
ich wäre euch dankbar wenn ihr mir einen Tip geben könntet. Ich betreibe eine Client/Server Kommunikation über Sockets. Im LAN läuft das Ganze richtig performant, ermögliche ich aber einem externen Client die Kommunikation über NAT geht der Durchsatz total krachen. Für eine 70MB Datei benötigt er eine anderthalbe Stunde.
Ich habe jetzt schon so ziemlich alles probiert und bin mittlerweile an dem Punkt angekommen an dem ich den NATenden Rechner verdächtige. Habt ihr noch eine Idee für mich die ich verfolgen kann?
Schnipsel Server:
Code:
public void run() {
try {
ServerSocketFactory srvFact;
if(withssl){
srvFact = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
} else {
srvFact = ServerSocketFactory.getDefault();
}
ServerSocket sock = srvFact.createServerSocket(port);
while (true) {
try {
Socket s = sock.accept();
s.setTcpNoDelay(true);
ObjectStreamProcess p = new ObjectStreamProcess(pdm, s, mode);
p.start();
}
catch (Exception ee) {
ee.printStackTrace();
}
}
} catch (Exception ee) {
ee.printStackTrace();
}
}
Der ObjectStreamProcess mapt eingehende Objekte um und connectiert auf einen RMI-Server, ich weiss das die Serialisierung nicht gerade das Schnellste ist, aber wie gesagt, im LAN läuft es recht flott.
ClientSchnipsel:
Code:
public void connect(String _host, int _port, int _mode) throws Exception {
this.host = _host;
this.port = _port;
this.mode = _mode;
if(mode <2) {
connection = new Socket(_host, _port);
System.out.println(connection);
} else {
SSLSocketFactory sslFact =(SSLSocketFactory)SSLSocketFactory.getDefault();
connection = (SSLSocket)sslFact.createSocket(host, port);
System.out.println("connection: "+connection);
}
connection.setTcpNoDelay(true);
}
Grüße Marcel