A
AntonWert
Gast
Habe eine Anwendung (Client Server) mit Fensteroberfläche geschrieben.
Dabei werden Daten vom Client zum Server übertragen. Lokal funktioniert alles einwandfrei, nur wenn ich über Internet Daten von einem Kolegen übertragen möchte tritt ein schwerwiegendes Problem auf. (Als Anmerkung: alle notwendigen Ports und Firewalls sind natürlich richtig konfiguriert)
Problem:
Der Client verschickt alle Daten (Kontrolle mit Ausgabe von System.out.println())
Der Server bekommt die ersten Bytes von vielen.
Die Java VM friert ein, auf dem Recher (XP) arbeitet kein TCP/IP Stack (kein Ping - nix) und nur ein Neustart hilft.
Verwendet wird jeweils das aktuelle JDK und JRE. Bin sowas von Ratlos und daher über jede Hilfe dankbar!
Dabei werden Daten vom Client zum Server übertragen. Lokal funktioniert alles einwandfrei, nur wenn ich über Internet Daten von einem Kolegen übertragen möchte tritt ein schwerwiegendes Problem auf. (Als Anmerkung: alle notwendigen Ports und Firewalls sind natürlich richtig konfiguriert)
Problem:
Der Client verschickt alle Daten (Kontrolle mit Ausgabe von System.out.println())
Der Server bekommt die ersten Bytes von vielen.
Die Java VM friert ein, auf dem Recher (XP) arbeitet kein TCP/IP Stack (kein Ping - nix) und nur ein Neustart hilft.
Verwendet wird jeweils das aktuelle JDK und JRE. Bin sowas von Ratlos und daher über jede Hilfe dankbar!
Code:
public class web_sync
{
public static void main(String[] args)
{
try
{
buttonSend.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
int pos = liste.getSelectedIndex();
if (pos>=0)
{
try
{
Socket clientSocket = new Socket(ip_Feld.getText(),8833);
File datei = new File(""+basepath_Feld.getText()+liste.getItem(pos));
String Dateiname = ""+datei;
String DateinameKurz = ""+liste.getItem(pos);
System.out.println("Sender: Datei: "+Dateiname);
System.out.println("Sender: Basepath: "+basepath_Feld.getText());
RandomAccessFile input = new RandomAccessFile(datei,"rw");
int bytes = (int)input.length();
byte buffer[] = new byte [bytes+1];
input.read(buffer,0,bytes);
char c;
System.out.println("Zu sendende Dateigroesse: "+bytes);
// größe
c = (char)(bytes % 200);
clientSocket.getOutputStream().write(c);
c = (char)((bytes/200) % 200);
clientSocket.getOutputStream().write(c);
c = (char)((bytes/(200*200)) % 200);
clientSocket.getOutputStream().write(c);
//länge dateiname
int laengeDateiname =DateinameKurz.length();
c = (char)(laengeDateiname);
clientSocket.getOutputStream().write(c);
// zeichen dateiname
for (int i = 0; i<laengeDateiname; i++)
{
c = DateinameKurz.charAt(i);
System.out.println("Sender: Sende Namen: "+c);
clientSocket.getOutputStream().write(c);
}
//daten
for (int i = 0; i<bytes; i++)
{
clientSocket.getOutputStream().write(buffer[i]);
System.out.println("Code 16");
}
clientSocket.close();
System.out.println("Code 17");
}
catch (IOException e)
{
System.err.println(e);
InfoDialog infoDialog = new InfoDialog(frame, "Fehler beim senden", "Meldung");
infoDialog.setVisible(true);
}
}
frame.pack();
System.out.println("Code 19");
}
}
);
try
{
System.out.println("Warte auf Verbindungen auf Port 8833...");
ServerSocket echod = new ServerSocket(8833);
while (true)
{
Socket socket = echod.accept();
(new Server_Thread(++cnt, socket, basepath_Feld.getText(),frame)).start();
}
}
catch (IOException e)
{
System.err.println(e.toString());
System.exit(1);
}
}
}
Code:
class Server_Thread extends Thread
{
public void run()
{
String msg = "EchoServer: Verbindung " + name;
System.out.println(msg + " hergestellt");
try {
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
int c;
int bytes;
String dateiErweiterung = new String();
boolean verbindungOK = true;
int data1[] = new int [300];
for (int i = 0; i<3; i++)
{
c = in.read();
if (c==-1)
{
System.out.println("Server Code 3a ");
verbindungOK = false;
break;
}
data1[i] = c;
}
bytes = data1[0] + data1[1]*200 + data1[2]*200*200;
int laengeDateiname = 0;
if (verbindungOK == true)
{
c = in.read();
if (c==-1)
verbindungOK = false;
laengeDateiname = c;
}
char data[] = new char [laengeDateiname+1];
for (int i = 0; i<laengeDateiname+1; i++)
data[i] = 0;
//dateiname
if (verbindungOK == true)
{
for (int i = 0; i<laengeDateiname; i++)
{
c = in.read();
if (c==-1)
{
verbindungOK = false;
break;
}
data[i] = (char)c;
}
dateiErweiterung = new String(data,0,laengeDateiname);
}
char datei[] = new char [bytes+100];
//daten
if (verbindungOK == true)
{
for (int i = 0; i<bytes; i++)
{
c = in.read();
if (c==-1)
{
verbindungOK = false;
break;
}
datei[i] = (char)c;
}
}
if (verbindungOK == true)
{
File dateiName = new File(baseDir+dateiErweiterung);
System.out.println("Datei: "+dateiName);
RandomAccessFile output = null;
try
{
dateiName.delete();
output = new RandomAccessFile(dateiName,"rw");
for (int i = 0; i<bytes; i++)
{
output.write(datei[i]);
}
}
catch (IOException e)
{
System.err.println(e);
}
finally
{
try
{
if (output!=null)
output.close();
}
catch (IOException e)
{
System.err.println(e);
}
}
}
//out.write((char)c);
System.out.println("Verbindung " + name + " wird beendet");
socket.close();
} catch (IOException e) {
System.err.println(e.toString());
}
}
}