TCP Сокет. Иногда приходят неверные данные - C#
Формулировка задачи:
При отправка данных с клиента на сервер....иногда случается так, что данные отправленные на сервер клиентом не совпадают в теми что пришли на сервер.
Протокол TCP. Синхронная передача и приём.
Например..отправляю 50 файлов..25 передаст нормально..на 26 ляжет..
Немного псевдокода
На сервере тоже самое только
Вот скриншот того,что иногда приходит вместо данных.
У меня вопрос только 1. Это где-то ошибка в коде..или нужно дополнительно фильтровать то, что пришло на сервер?
foreach(Filename in Filenames)
{
SEND(Filename);
SEND(SIZE OF (FILE));
SEND (FILE);
}
Каждый из этих методов что-то отсылает и что-то принимает. (Синхронно)RECV(Filename) RECV (SIZE) RECV(FILE
Решение задачи: «TCP Сокет. Иногда приходят неверные данные»
textual
Листинг программы
public void ReciveCommand(Socket Handler)
{
int BytesRecive = 0;
int BytesSend = 0;
byte[] Message = new byte[1024];
string MessageString = "";
int CommandSize = 0;
string Size = "";
string TempSize = "";
bool isSize = true;
while (isSize)
{
BytesRecive = Handler.Receive(Message, 1, SocketFlags.None);
TempSize = ByteArrayToStr(Message, 1);
if (TempSize.Equals("!"))
{
isSize = false;
}
else
{
Size += TempSize;
}
}
BytesSend = Handler.Send(StrToByteArray("}"), 1, SocketFlags.None);
CommandSize = int.Parse(Size);
BytesRecive = Handler.Receive(Message, CommandSize, SocketFlags.None);
BytesSend = Handler.Send(StrToByteArray("}"), 1, SocketFlags.None);
MessageString = ByteArrayToStr(Message, BytesRecive);
}