Не правильно работает передача данных TCP C++ C#

Проблема: На этом изображении сообщение "Hello"

Вместо "Hello" получается "??o" последняя буква "o" и так всегда что делать? Использовал разные коды и нечего( Использую Soket-ы для передачи данных

Client C++:

void StartConnect(string in, string out)
{
    WSAData wsaData;
    SOCKADDR_IN addr;
    int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
    cout << "startup: " << result << endl;

    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8005);
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    result = connect(s, (SOCKADDR*)&addr, sizeof(addr));
    cout << "Connect: " << result << endl;

    int count = 0;
    char sendBuf[512] = "Hello";
    int sendResult;
    sendResult = send(s, sendBuf, sizeof(sendBuf), 0);

}

Server c#:

        static int port = 8005; // порт для приема входящих запросов
        static void Main(string[] args)
        {
            // получаем адреса для запуска сокета
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);

            // создаем сокет
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                // связываем сокет с локальной точкой, по которой будем принимать данные
                listenSocket.Bind(ipPoint);

                // начинаем прослушивание
                listenSocket.Listen(10);

                Console.WriteLine("Сервер запущен. Ожидание подключений...");

                while (true)
                {
                    Socket handler = listenSocket.Accept();
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0; // количество полученных байтов
                    byte[] data = new byte[512]; // буфер для получаемых данных

                    do
                    {
                        bytes = handler.Receive(data);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (handler.Available > 0);

                    Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());

                    // отправляем ответ
                    string message = "ваше сообщение доставлено";
                    data = Encoding.Unicode.GetBytes(message);
                    handler.Send(data);
                    // закрываем сокет
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

Пробовал перекодировать в другой формат utf16 не получилось... Но на клиенте и сервере на C# таких проблем не было, подскажите что делать?


Ответы (1 шт):

Автор решения: artEA

Перевод C# в Encoding.ASCII помог проблеме.

→ Ссылка