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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д