Ich habe große Datei zu trnasfer, in diesem Moment verwende ich TcpClient und NetworkStream-Klasse, um das zu tun, aber es ist nicht genug. Wenn ich NetworkStream.Write benutze und lese es verliere Bytes Ich weiß nicht, wie kann ich sicherstellen, dass TCP wird aufhören zu lesen, wenn alle Bytes in Ordnung sein wird.TcpClient VS Socket in großen Dateitransfer
Dann habe ich Socket-Klasse gefunden, und jetzt meine Frage, "Socket wird über alle Bytes vollkommen sicher sein, bevor es zu Ende gelesen?"
Wie ich Datei folgendes Datum:
byte[] VideoFrom = new byte[FizeSizeSendedBefore];
byte[] PartData = new byte[clientSocket.ReceiveBufferSize];
int PartNumbers = (VideoSize/clientSocket.ReceiveBufferSize) + 1;
int lastPackageSize = VideoSize - ((PartNumbers - 1) * clientSocket.ReceiveBufferSize);
int i;
int bytesToRead = 0;
int ActualSize = 0;
for (i = 0; i < PartNumbers; i++)
{
if (i < PartNumbers - 1)
{
bytesToRead = clientSocket.ReceiveBufferSize;
}
else
{
bytesToRead = lastPackageSize;
}
ActualSize += bytesToRead;
PartData = new byte[bytesToRead];
System.Threading.Thread.Sleep(2);
networkStream.Read(PartData, 0, bytesToRead);
Buffer.BlockCopy(PartData, 0, VideoFrom, i * clientSocket.ReceiveBufferSize, bytesToRead);
}
if (!Directory.Exists("./temp/anwsers/" + AnwserXML.Attribute("number").Value)) { Directory.CreateDirectory("./temp/anwsers/" + AnwserXML.Attribute("number").Value); }
File.WriteAllBytes("./temp/anwsers/" + AnwserXML.Attribute("number").Value + "/" + AnwserXML.Attribute("client").Value + ".mov", VideoFrom);
}
Wie ich Datei
int PartNumber = (FizeSizeSendedBefore/ clientSocket.ReceiveBufferSize) + 1;
int lastPackageSize = FileSize - ((PartNumber - 1) * clientSocket.ReceiveBufferSize);
int i;
for (i = 0; i < PartNumber; i++)
{
if (i < PartNumber - 1)
{
while (!serverStream.CanRead) { }
serverStream.Write(outStream, i * clientSocket.ReceiveBufferSize, clientSocket.ReceiveBufferSize);
}
else
{
while (!serverStream.CanRead) { }
serverStream.Write(outStream, i * clientSocket.ReceiveBufferSize, lastPackageSize);
}
}
Ich bin sicher, dass es * nicht * Bytes verlieren. Ich bin sicher, das Problem ist irgendwo in Ihrem Code - aber es ist schwer zu sagen, wo, wenn Sie nicht Ihren Code gezeigt haben ... –
Ich habe meine Frage aktualisiert –
Es funktioniert alles gut bei loaclhost, aber bei LAN nicht so gut. –