Привет, ребята, у меня есть проблема в настоящее время при использовании Socket для отправки данных.
В настоящее время у меня возникает очень странная проблема, когда клиент отправляет на сервер, например, «СЕРДЦЕ», в виде сердцебиения. После отправки в первый раз сервер начинает получать целую партию \ 0, не всегда такую же сумму до СЕРДЦА. Я использую очереди для постановки в очередь на отправку, поэтому на медленных соединениях он ожидает текущей отправки, прежде чем отправит следующую, но для крошечных отрезков времени я немного запутался.
public void Send(string data)
{
if (Connected)
{
SendQueue.Enqueue(data);
if (t.ThreadState == ThreadState.Stopped)
{
t = new Thread(new ThreadStart(SendData));
t.Start();
}
else if (t.ThreadState == ThreadState.Unstarted)
t.Start();
}
}
и функция SendData
private void SendData()
{
if (sending)
return;
sending = true;
while (SendQueue.Count > 0)
{
if (ClientSocket.Connected)
{
byte[] data = Networking.StringToByte((string)SendQueue.Dequeue());
ClientSocket.Send(data);
}
}
sending = false;
}
Я не думаю, что это отправляющая функция, потому что я отладил ее, а байтовый массив всегда содержит правильную информацию.
принимающая сторона еще проще.
public string Receive()
{
string msg = "";
if (Connected)
{
byte[] data = new byte[1024];
while (ClientSocket.Avaliable > 0)
{
ClientSocket.Receive(data);
msg += Networking.ByteToString(data).Trim();
}
}
return msg;
}
Если бы кто-то мог указать, где я иду не так, или если я пошел по этому пути, то это совершенно неправильный путь, который был бы великолепен.
Спасибо, ребята.
Я напомню людям, что это, по-видимому, случайная длина \ 0 каждые 2 секунды (в этом примере для сердцебиения сообщения СЕРДЦЕ)