以socket连接方式向memcached存储数据

来源:互联网 发布:最近淘宝生意很差2017 编辑:程序博客网 时间:2024/05/04 19:26

思路很简单,绑定memcached的ip和portt,然后按照协议发送数据即可。但是里面的细节需要谨慎


#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <syslog.h>#include <errno.h>#include <stdlib.h>#define MAX_LISTEN_NUM 5#define SEND_BUF_SIZE 4096*8#define RECV_BUF_SIZE 1000#define SERVER_PORT 11211#define IP  "192.168.40.29" char recvbuf[RECV_BUF_SIZE] = {0}; char sendbuf[SEND_BUF_SIZE] = {0};int main(){    int sock_fd = 0;       int recvlen = 0;    int retlen = 0;    int sendlen = 0;    int leftlen = 0;    char *ptr = NULL;    struct sockaddr_in ser_addr;    memset(&ser_addr, 0, sizeof(ser_addr));    ser_addr.sin_family = AF_INET;    inet_aton("192.168.40.29", (struct in_addr *)&ser_addr.sin_addr);    ser_addr.sin_port = htons(SERVER_PORT);    sock_fd = socket(AF_INET, SOCK_STREAM, 0);    if(sock_fd < 0)    {        syslog(LOG_ERR, "%s:%d, create socket failed\n", __FILE__, __LINE__);        exit(1);    }    if(connect(sock_fd, (struct sockaddr *)&ser_addr, sizeof(ser_addr)) < 0)    {        syslog(LOG_ERR, "%s:%d, connect socket failed\n", __FILE__, __LINE__);        exit(1);    }memset(sendbuf, 0x00, sizeof(sendbuf));char *m_key = "/test.html";    // m_key = c_key;FILE *fp;    fp = fopen("cmc.txt" , "r");    fseek( fp , 0 , SEEK_END );    int file_size;    file_size = ftell( fp );    printf( "%d" , file_size );    char tmp[4096*4] = {0};    fseek( fp , 0 , SEEK_SET);    fread( tmp , file_size , sizeof(char) , fp);    printf("file:%s\n" , tmp );char *value = "HTTP/1.1 200 OK \Server: nginx/1.9.11 \Date: Wed, 02 Mar 2016 04:21:23 GMT \Content-Type: text/html \Content-Length: 353 \Last-Modified: Mon, 22 Feb 2016 21:13:48 GMT \Connection: close \Accept-Ranges: bytes \<html> \<head> \</head> \<body> \<a href=/view/1/index.html>[ONE] WEBSITE_PROJ_FIRST</a><br/><br/> \<a href=/view/2/index.html>[TWO] WEBSITE_PROJ_SECOND</a><br/><br/> \<a href=/view/3/index.html>[THR] WEBSITE_PROJ_THIRD</a><br/><br/> \<p>192.168.40.29</p> \</body> \</html>";    char *m_t_value = "test local value";    m_t_value = tmp;    char valuelen[10] = {0};    sprintf(valuelen, "%d", strlen(m_t_value));int index = 0;     char *set = "set ";     memcpy(sendbuf+index, set, strlen(set));      // "set "     index += strlen(set);          memcpy(sendbuf + index, m_key, strlen(m_key));  // "set key"     index += strlen(m_key);     char *cmd = " 0 0 ";     memcpy(sendbuf + index, cmd, strlen(cmd));     // "set key 0 0"     index += strlen(cmd);     memcpy(sendbuf + index, valuelen, strlen(valuelen));  // "set key 0 0 valuelen"     index += strlen(valuelen);     char *rn = "\r\n";     memcpy(sendbuf + index, rn, strlen(rn));    // "set key 0 0 valuelen/r/n"     index += strlen(rn);     memcpy(sendbuf + index, m_t_value, strlen(m_t_value)); // "set key 0 0 valuelen/r/nvalue"     index += strlen(m_t_value);     memcpy(sendbuf + index, rn, strlen(rn));       // "set key 0 0 valuelen/r/nvaluel/r/n"     index += strlen(rn);int writelen = write(sock_fd, sendbuf, index);printf("writelen:%d writebuf:%s\n", writelen, sendbuf);char recvbuf[1024] = {0};int readlen = read(sock_fd, recvbuf, sizeof(recvbuf));printf("recvbuf:%s\n", recvbuf);     close(sock_fd);    }




0 0