执行套接字I / O时strcmp不起作用

时间:2014-09-16 14:26:04

标签: c sockets strcmp

我正在研究一个基于套接字的简单echo应用程序。我的客户端代码如下。套接字I / O正在完美地工作。我收到每个发送字符串的回显。但是,当用户输入为"退出"时,我想终止客户端。我用strcmp()函数来比较字符串。它似乎不起作用。

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


int main(int argc,char **argv){

    int sc,cli,b,tmp,clilen;
    struct sockaddr_in serveradd;

    int port;
    char buffer[1024],sbuffer[1024];

    port = atoi(argv[2]);

    sc = socket(PF_INET,SOCK_STREAM,0);

    memset(&serveradd,0,sizeof(serveradd));

    serveradd.sin_family=AF_INET;
    serveradd.sin_port=htons(port);
    serveradd.sin_addr.s_addr=inet_addr(argv[1]);

    connect(sc, (struct sockaddr *) &serveradd, sizeof(serveradd));

    while(1){
        memset(&buffer,0,sizeof(buffer));
        scanf("%s",buffer);

        if(strcmp(buffer,"exit")==0){
            break;
        }

        send(sc, buffer, strlen(buffer),0);
        memset(&sbuffer,0,sizeof(sbuffer));
        tmp=recv(sc,sbuffer,1023,0);
        sbuffer[tmp]='\0';
        printf("%s\n",sbuffer);
    }
        close(cli);




}

2 个答案:

答案 0 :(得分:0)

memset(&buffer,0,sizeof(buffer));

这里不应该是&buffer,你试图将缓冲区的地址设置为零。 buffer本身就是基地址。

答案 1 :(得分:0)

使用close(cli);cli未初始化。因此,UB。

strcmp(buffer,"exit")==0为真后调用此方法时, 失败将归strcmp()所示。