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));