Вывод прочтённого из сокета при достижении символа новой строки

395
05 августа 2021, 12:00

Не могу получить ответ от сервера сокета для клиента на С#. После вызова Receive происходит блокировка и не снимается, даже если я превышу количество символов предназначенные для чтения.

Есть аналог кода на php, он работает и ответ получает. Ответ - произвольная строка заканчивающаяся символом новой строки. В php для этого нужно в функции socket_read третьим параметром указать PHP_NORMAL_READ.

Возможно ли в C# настроить снятие блокировки и вывод полученного ответа, когда строка ответ достигает новой строки?

Или я просто где-то ошибся?

Вот клиент приложение на C#

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleSocketClient
{
    class Program
    {
        static void Main(string[] args)
        {
            SocketReader("127.0.0.1", 10000);
        }
        static void SocketReader(string address, int port)
        {
            var ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
            var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ipPoint);
            socket.Send(Encoding.Unicode.GetBytes("READER"));
            do {
                Console.WriteLine("loop");
                var data = new byte[2048];
                Console.WriteLine("start receive");
                var bytes = socket.Receive(data, data.Length, 0);
                Console.WriteLine("end receive");
                Console.WriteLine(bytes);
            }
            while (socket.Available > 0);
            socket.Close();
        }
    }
}

Ответ

loop
start receive

Дополнительный вопрос

Может он блокируется до того момента, пока не разорвется соединение?

Answer 1

Разобрался. Причина была в неправильном перекодировании. Изменил Encoding.Unicode на Encoding.UTF8 и всё стало работать по часам.

READ ALSO
как передать List как параметр?

как передать List как параметр?

как в extetion написать метод который принемает List?

279
Запрос SQL в LINQ

Запрос SQL в LINQ

Есть такой запрос SQL

130
Почему программа крашится неким WerFault.exe?

Почему программа крашится неким WerFault.exe?

Всем приветУ меня есть программа которая захватывает нажатые клавиши с клавиатуры на низком уровне и сохраняет клавиши в файл

277