TCP - нарушается целостность данных при передаче - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. В общем суть. Есть клиент-сервер. Серверу посылается запросу вида, new like (id,tID,uID) пример: new like(312312,312312,312312) все проходит отлично. Затем в цикле, отправка 2 запроса. Посылаю аналогичный запрос. Но выходит битым. т.е. выводил на консоль. приходит только "new" скрин серверный метод
private void SendError(TcpClient Client, string Str)
        {
            // Приведем строку к виду массива байт
            byte[] Buffer = Encoding.ASCII.GetBytes(Str);
            // Отправим его клиенту
            Client.GetStream().Write(Buffer, 0, Buffer.Length);
            // Закроем соединение
            Client.Close();
        }
 
public Client(TcpClient Client)
        {
            int ID = Server.TCount;
            Console.WriteLine("Client[" + ID + "] - Connected!");
            // Объявим строку, в которой будет хранится запрос клиента
            string Request = "";
            // Буфер для хранения принятых от клиента данных
            byte[] Buffer = new byte[1024];
            // Переменная для хранения количества байт, принятых от клиента
            int Count;
            // Читаем из потока клиента до тех пор, пока от него поступают данные
            try
            {
                while ((Count = Client.GetStream().Read(Buffer, 0, Buffer.Length)) > 0)
                {
                    // Преобразуем эти данные в строку и добавим ее к переменной Request
                    Request = Encoding.ASCII.GetString(Buffer, 0, Count);
                    Console.WriteLine(Request);
                    if(Request.Contains("new"))
                    {
                        try
                        {
                            int unixTime = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
                            match = r1.Match(Request);
                            if(!match.Success)
                            {
                                Thread.Sleep(1000);
                                Buffer = Encoding.ASCII.GetBytes("302");
                                Client.GetStream().Write(Buffer, 0, Buffer.Length);
                                Console.WriteLine("302");
                            }
                            else
                            {
                                ExecuteQuery("INSERT INTO [task] (id_vk,type,tID,uID,time) VALUES (" + match.Groups[2].Value + ",\"" + match.Groups[1].Value + "\"," + match.Groups[3].Value + "," + match.Groups[4].Value + ", "+unixTime+")");
                                Buffer = Encoding.ASCII.GetBytes("200");
                                Thread.Sleep(1000);
                                Client.GetStream().Write(Buffer, 0, Buffer.Length);
                                Console.WriteLine("200");
                            }
                        }
                        catch
                        {
                            Buffer = Encoding.ASCII.GetBytes("100");
                            Client.GetStream().Write(Buffer, 0, Buffer.Length);
                            Console.WriteLine("100");
                        }
                    }
                    else if(Request.Contains("get"))
                    {
 
                    }
                    else if (Request.Contains("cancel"))
                    {
 
                    }
                    else
                    {
                        SendError(Client, "301");
                    }
                    Console.WriteLine(Request);
                    //LoadData(Request);
                }
            }
            catch
            {
                Server.Threads[ID].Abort();
            }

            Client.Close();
        }
Клиент
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
 
namespace TestClient
{
    class Program
    {
        static void Main(string[] args)
        {
            string data; // Юзерская дата
            byte[] remdata = { };
            TcpClient Client = new TcpClient();
            Console.Write("IP to connect to: ");
            string ip = Console.ReadLine();
            Console.Write("\r\nPort: ");
            int port = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("\r\nConnecting to server...");
            try
            {
                Client.Connect(ip, port);
            }
            catch
            {
                Console.WriteLine("Cannot connect to remote host!");
                return;
            }
            Console.Write("done\r\nTo end, type 'END'");
            Socket Sock = Client.Client;
            while (true)
            {
                Console.Write("\r\n>");
                data = Console.ReadLine();
                if (data == "END")
                    break;
                Sock.Send(System.Text.Encoding.ASCII.GetBytes(data));
                Sock.Receive(remdata);
                Console.Write("\r\n<" + System.Text.Encoding.ASCII.GetString(remdata));
            }
            Console.ReadKey();
            Sock.Close();
            Client.Close();
 
        }
    }
}
и еще вопрос. как в клиенте, отловить ответ от сервера
up!

Решение задачи: «TCP - нарушается целостность данных при передаче»

textual
Листинг программы
Console.Write("\r\n<" + System.Text.Encoding.ASCII.GetString(remdata));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы