Я пытаюсь отправить команды из приложения .NET Console в экземпляр Redis через сокет. Я не понимаю, почему отправленные команды не применяются, так как байты были отправлены. Я пробовал и с протоколом RESP, и с обычная команда. Но никто не применяется к серверу:
class Program
{
public static string command0 = "set a 200";
public static string command1 = "*3\r\n$3\r\nset\r\n$1\r\na\r\n:200\r\n";
static void Main(string[] args)
{
Task.Run(async () =>
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 32772);
await sock.ConnectAsync(point);
await sock.SendDataAsync(command0);
await sock.SendDataAsync(command1);
}).Wait();
Console.WriteLine("Hello World!");
Console.ReadKey();
}
}
public static class SocketExtensions
{
public static async Task SendDataAsync(this Socket socket,string message)
{
byte[] bytes = Encoding.UTF8.GetBytes(message.ToCharArray());
ArraySegment<byte> segment = new ArraySegment<byte>(bytes,0,bytes.Length);
int rem = bytes.Length;
while(rem>0)
{
int sent=await socket.SendAsync(bytes, SocketFlags.None);
rem -= sent;
segment.Slice(sent);
}
}
}
Состояние сокета перед выполнением команды:
Может ли это быть из-за кодировки?