我正在开发一个基于套接字的简单回显应用程序。我的客户端代码如下。套接字 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);
}
最佳答案
memset(&buffer,0,sizeof(buffer));
这里不应该是您尝试将缓冲区地址设置为零的&buffer
。 buffer
本身就是基地址。
关于c - strcmp 在进行套接字 I/O 时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871407/