Hallo zusammen,
ich habe ein kleines Problem mit einer Client/Server Kombination. Mein Server soll auf einen Client warten und wenn sich dieser anmeldet eine Datei verschicken. Auf der Clientseite wird diese empfangene Datei dann wieder auf die Festplatte geschrieben. Währenddessen soll der Client die Zeit messen, die für den Vorgang benötigt wird und diese nach erfolgreichem Empfang der Daten an den Server zurücksenden. Ist zwar noch nicht geschrieben, ist aber nicht das Problem, im Moment deshalb nur ein Platzhalter.
Jedoch bleibt meine Schleife, die die Daten empfängt nach Erhalt hängen und das Programm läuft nicht weiter. Merkwürdigerweise liegt jedoch die Datei schon komplett auf der Festplatte und ist mit dem Original auch identisch.
Hier mal ein Ausschnitt aus dem Client ...
... und der entsprechende Abschnitt aus dem Server
Wenn ich nur die Datei verschicke und keine Antwort sende, läuft der Client. Das gleiche Spiel auch bei dem Versenden der benötigten Zeit, wenn nur dieser Wert übertragen werden soll. Vielleicht hat jemand von euch eine Idee, wo mein Problem zu suchen ist. Bei Bedarf gibt es auch noch mehr Quelltext.
ich habe ein kleines Problem mit einer Client/Server Kombination. Mein Server soll auf einen Client warten und wenn sich dieser anmeldet eine Datei verschicken. Auf der Clientseite wird diese empfangene Datei dann wieder auf die Festplatte geschrieben. Währenddessen soll der Client die Zeit messen, die für den Vorgang benötigt wird und diese nach erfolgreichem Empfang der Daten an den Server zurücksenden. Ist zwar noch nicht geschrieben, ist aber nicht das Problem, im Moment deshalb nur ein Platzhalter.
Jedoch bleibt meine Schleife, die die Daten empfängt nach Erhalt hängen und das Programm läuft nicht weiter. Merkwürdigerweise liegt jedoch die Datei schon komplett auf der Festplatte und ist mit dem Original auch identisch.
Hier mal ein Ausschnitt aus dem Client ...
Code:
public void run() {
try {
// Öffnen des Sockets, der zu schreibenden Datei,
// den Streams und den benötigten Variablen
Socket socket = new Socket(this.serverName, this.port);
File file = new File("C:/Temp/" + this.fileName);
FileOutputStream outStream = new FileOutputStream(file);
InputStream inStream = socket.getInputStream();
PrintWriter cltOut = new PrintWriter(socket.getOutputStream(), true);
byte[] buffer = new byte[16384];
int length = 0;
int msg_time = 0;
System.out.println("Verbindung zum Server hergestellt.");
// Schreiben der empfangenen Daten in die Datei
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
System.out.println("Datei empfangen.");
// Übertragung der benötigten Zeit
msg_time = 1093; // derzeit noch ein Testwert
cltOut.print(msg_time);
System.out.println("Uebertragungszeit: " + msg_time + " ms");
// Schließen der Streams und des Sockets
outStream.close();
inStream.close();
cltOut.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
... und der entsprechende Abschnitt aus dem Server
Code:
// Initialisierung der Streams und Variablen
FileInputStream fis = new FileInputStream(tmFile);
OutputStream os = socket.getOutputStream();
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
byte[] buffer = new byte[16384];
int bytesRead = 0;
int msg_time = 0;
// Senden der Testdatei
while ((bytesRead = fis.read(buffer)) > 0) {
os.write(buffer, 0, bytesRead);
}
System.out.println("Datei uebertragen.");
// Empfangen der Übertragungsdauert
msg_time = Integer.valueOf(is.readLine());
System.out.println("Uebertragungszeit: " + msg_time + " ms");
// Schließen der Streams
is.close();
fis.close();
os.close();
Wenn ich nur die Datei verschicke und keine Antwort sende, läuft der Client. Das gleiche Spiel auch bei dem Versenden der benötigten Zeit, wenn nur dieser Wert übertragen werden soll. Vielleicht hat jemand von euch eine Idee, wo mein Problem zu suchen ist. Bei Bedarf gibt es auch noch mehr Quelltext.