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

标签 linux sockets redis

我有以下代码连接到在端口 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/

相关文章:

c - 使用 wait() 和 signal() 有什么好处?

sockets - Flash 不再运行调试器。 Windows-10 中可能存在套接字问题吗?

C 套接字编程 - 从服务器写入(而不是客户端)写入服务器

database - 如何在D盘安装redis服务器?

javascript - 如何使用 Fuse.js 和 Redis 在 MySQL 表中进行全文搜索?

arrays - bash 数组中已安装软件包的 Debian 输出

python - 在 Fedora Core 上安装 Gitosis 时出错

database - "appendfsync everysec"和 VM 有什么区别?

linux - 从命令行计算多个子目录中的文件数量

iOS 7 套接字连接被拒绝错误 61