Я пробую свои силы в программировании сокетов в C # (.NET).Я сослался на пару примеров из codeproject, но моя передача файлов всегда отправляет неполные данные.
Данные очень очень маленьких размеров отлично работают, например, 1 КБ.Но файлы большего размера передаются не полностью, а именно изображения.
Вот мой код клиента, который отправляет файл на сервер.В clientData хранится двоичный файл этого файла.
byte[] fileData = File.ReadAllBytes(filePath + fileName);
byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
fileNameLen.CopyTo(clientData, 0);
fileNameByte.CopyTo(clientData, 4);
fileData.CopyTo(clientData, 4 + fileNameByte.Length);
curMsg = "Connection to server ...";
clientSock.Connect(ipEnd);
int count;
curMsg = "File sending...";
count = clientSock.Send(clientData);
MessageBox.Show(count+" "+clientData.Length);
curMsg = "Disconnecting...";
clientSock.Close();
В то время как здесь приведен мой код сервера, который получает файл.
sock.Listen(100);
curMsg = "Running and waiting to receive file.";
Socket clientSock = sock.Accept();
byte[] clientData = new byte[1024 * 5000];
int receivedBytesLen = clientSock.Receive(clientData);
curMsg = "Receiving data...";
int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);
BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath +"/"+ fileName, FileMode.Append)); ;
bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
curMsg = "Saving file...";
bWrite.Close();
clientSock.Close();
Что смешно, когда я устанавливаюточка останова на 'send' на клиенте, файл передается нормально.Я наблюдаю количество байтов на обоих концах, и байты передачи совпадают, когда я использую точку останова, а когда я не получаю, полученные байты меньше, чем переданные байты на клиенте.
Что я делаю неправильно