Ich sitze gerade an einem C#-Projekt, welches aus 2 Anwendungen besteht (Clientanwendung und Serveranwendung).
Der Client sendet eine beliebige Datei und der Server empfängt diese und speichert diese bei sich im Ordner ab.
Bisher sind mir 2 Probleme aufgefallen:
- Wenn der Client eine ~19MB große .txt Datei schickt, welche komplett voll mit zufälligen Zeichen ist (jedoch keinerlei Leerzeichen!), dann empfängt der Server zwar eine ~19MB große .txt Datei, jedoch stehen nur in den ersten paar Zeilen dieser .txt Datei Zeichen und die restlichen Zeilen sind komplett (fälschlicherweise) mit Leerzeichen befüllt (wo eigentlich ebenfalls irgendwelche Zeichen stehen müssten). Der Inhalt der .txt kommt also nicht vollständig an.
- Wenn der Client ein 9KB großes .png Bild schickt, dann kommt beim Server zwar auch eine 9KB großes .png Bilddatei an, jedoch lässt sich diese Bilddatei, welche der Server empfangen hat, nicht öffnen. Die Windows-Fotoanzeige zeigt die Meldung, dass die Datei entweder beschädigt oder zu groß sei...
Server:
Client:
Der Client sendet eine beliebige Datei und der Server empfängt diese und speichert diese bei sich im Ordner ab.
Bisher sind mir 2 Probleme aufgefallen:
- Wenn der Client eine ~19MB große .txt Datei schickt, welche komplett voll mit zufälligen Zeichen ist (jedoch keinerlei Leerzeichen!), dann empfängt der Server zwar eine ~19MB große .txt Datei, jedoch stehen nur in den ersten paar Zeilen dieser .txt Datei Zeichen und die restlichen Zeilen sind komplett (fälschlicherweise) mit Leerzeichen befüllt (wo eigentlich ebenfalls irgendwelche Zeichen stehen müssten). Der Inhalt der .txt kommt also nicht vollständig an.
- Wenn der Client ein 9KB großes .png Bild schickt, dann kommt beim Server zwar auch eine 9KB großes .png Bilddatei an, jedoch lässt sich diese Bilddatei, welche der Server empfangen hat, nicht öffnen. Die Windows-Fotoanzeige zeigt die Meldung, dass die Datei entweder beschädigt oder zu groß sei...
Server:
Code:
public void recieveFile() {
NetworkStream nws = clientconnection.GetStream();
StreamReader sr = new StreamReader(nws);
StreamWriter sw = new StreamWriter(nws);
// Recieve filename
string filename = sr.ReadLine().Remove(0, 10);
// Recieve filesize
long filesize = Convert.ToInt64(sr.ReadLine().Remove(0, 10));
Byte[] fileBytes = new Byte[filesize];
nws.Read(fileBytes, 0, fileBytes.Length);
nws.Close();
var a = File.OpenWrite(filename);
a.Write(fileBytes, 0, fileBytes.Length);
a.Flush();
a.Close();
}
Client:
Code:
public void sendFileToServer(String filename) {
var a = File.OpenRead(filename);
FileInfo fo = new FileInfo(filename);
long filesize = fo.Length;
// Write file into fileBytes-Array
Byte[] fileBytes = new Byte[filesize];
a.Read(fileBytes, 0, fileBytes.Length);
a.Close();
// Send filename to server
sw.WriteLine("Filename: " + filename);
sw.Flush();
// Send filesize to server
sw.WriteLine("Filesize: " + filesize);
sw.Flush();
// Send fileBytes to server
NetworkStream nws = clientConnection.GetStream();
nws.Write(fileBytes, 0, fileBytes.Length);
nws.Flush();
nws.Close();
sw.Close();
sr.Close();
clientConnection.Close();
}