Не могу получить ответ от сервера сокета для клиента на С#. После вызова 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
Дополнительный вопрос
Может он блокируется до того момента, пока не разорвется соединение?
Разобрался. Причина была в неправильном перекодировании. Изменил Encoding.Unicode
на Encoding.UTF8
и всё стало работать по часам.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем приветУ меня есть программа которая захватывает нажатые клавиши с клавиатуры на низком уровне и сохраняет клавиши в файл