gpt4 book ai didi

c# - 无法使用 RESP 在 Redis 服务器上执行命令

转载 作者:可可西里 更新时间:2023-11-01 11:24:40 27 4
gpt4 key购买 nike

我正在尝试通过套接字将命令从 .NET 控制台应用程序发送到 Redis 实例。我不明白为什么在发送字节后未应用发送的命令。我尝试了 RESP 协议(protocol)和正常命令。但没有应用到服务器:

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

执行命令前套接字的状态:

enter image description here

会不会是编码的原因?

最佳答案

问题出在命令中:

对于命令 set a 200 我正在创建一个 RESP 查询:

*3\r\n$3\r\nset\r\n$1\r\na\r\n:200\r\n

问题是我认为值应该作为整数发送。相反,我不得不将它写成一个批量字符串:

$3\r\n200\r\n

代替

:200\r\n

关于c# - 无法使用 RESP 在 Redis 服务器上执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com