gpt4 book ai didi

linux - 连接Redis时无法读取任何数据

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

我有以下代码连接到在端口 6379 上本地运行的 Redis。问题是无法读取任何输出,读取器线程只是阻塞在 recvfrom() 上。例如,在回显服务器上一切正常,但在 Redis 上却不行。

#include <stdio.h>     
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

struct sockaddr_in servAddr;

int sock;

/* Reader loop */
void *readerf(void *n) {
char buffer[128];
int bytesRcvd;
while((bytesRcvd = recvfrom(sock, buffer, 127, 0, NULL, 0)) > 0) {
printf("[%s]",buffer);
}
}

char *getk = "GET key\n";
char *setk = "SET key \"test\"\n";

void sendd(char *str) {
if (send(sock, str, strlen(str), 0) != strlen(str))
perror("Send error");
send(sock, "\0", 1, 0);
//printf("sent: [%s]",str);
}

int main(int argc, char *argv[]) {
int i = 1;

if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
return 1;

/* Construct the server address structure */
memset(&servAddr, 0, sizeof(servAddr)); /* Zero out structure */
servAddr.sin_family = AF_INET; /* Internet address family */
servAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); /* Server IP address */
servAddr.sin_port = htons(6379); /* Server port */
if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr))<0)
perror("Could not connect");

sendd(getk);
sendd(setk);
sendd(getk);

pthread_t reader;
pthread_create(&reader, NULL, readerf, &i);

sleep(5);
close(sock);

return 0;
}

最佳答案

看来您没有正确实现 Redis 的协议(protocol):http://redis.io/topics/protocol

如果您认真地为客户编写代码,而不仅仅是调查/娱乐,请考虑 hiredis:https://github.com/antirez/hiredis/

关于linux - 连接Redis时无法读取任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495148/

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