2017-04-22 37 views
0

我的服务器出现问题。他无法将基本信息发送给客户。 我认为这个问题是在客户端,因为他不能接收发送邮件,但我不知道如何解决这个问题:/通过套接字进行C服务器 - 客户端通信 - 如何将消息从服​​务器打印到客户端

我的服务器:

int server(){ 
    int lis_soc,s,r; 
    struct sockaddr_un ad; 
    char buffer[MAXSIZE]; 

    lis_soc=socket(AF_UNIX,SOCK_STREAM,0); 
    memset(&ad,0,sizeof(ad)); 
    ad.sun_family=AF_UNIX; 
    strcpy(ad.sun_path,"./sock"); 

    unlink("./sock"); 
    bind(lis_soc,(struct sockaddr *) &ad,sizeof(ad)); 
    listen(lis_soc,10); 
    s=accept(lis_soc,0,0); 
    while(strcmp(buffer,"halt")!=0 && strcmp(buffer,"quit")!=0){ 
     char *pch=(char *)malloc(MAXSIZE); 

    bzero(buffer,MAXSIZE); 
    r=read(s,buffer,sizeof(buffer)); 
    strcpy(pch,buffer); 
    strtok(pch," "); 

    if(strcmp(buffer,"help")==0) get_help(s); //this is the funcion for print from server 
    else if(strcmp(buffer,"info")==0) get_info(); 
    else if(strcmp(buffer,"run")==0) run(); 
    else if(strcmp(pch,"ls")==0){ 
     if(strcmp(buffer,"ls")==0) ls(".",NULL); 
     else while ((pch = strtok (NULL, " ")) != NULL) {ls(pch,NULL);} 
    } 
    else system(buffer); 
    } 
    close(s); 
    printf("SERVER END OF CONNECTION\n"); 
    return 0; 
} 

我的客户:

int client(){ 
    int s,r; 
    char buffer[MAXSIZE]; 
    char output[]="client: Enter data for server: "; 
    struct sockaddr_un ad; 

    s=socket(AF_UNIX,SOCK_STREAM,0); 
    memset(&ad,0,sizeof(ad)); 
    ad.sun_family=AF_UNIX; 
    strcpy(ad.sun_path,"./sock"); 

    connect(s,(struct sockaddr *) &ad,sizeof(ad)); 
    while(strcmp(buffer,"halt")!=0 && strcmp(buffer,"quit")!=0){ 
    bzero(buffer,MAXSIZE); 
    write(1,output,strlen(output)); 
    r=read(0,buffer,sizeof(buffer)); 
    buffer[r-1]='\0'; 
    write(s,buffer,strlen(buffer)); 
    } 
    close(s); 
    printf("CLIENT END OF CONNECTION\n"); 
    return 0; 
} 

功能get_help()从服务器调用:

void get_help(int lis_soc){ 
    char buffer[]="Ahoj client"; 
    write(lis_soc,&buffer,strlen(buffer)); 
} 

函数调用后获得帮助没有打印。为什么?

+0

你必须完全,正确处理结果返回所有的系统调用,如“连接()”和“阅读()”。 – ThingyWotsit

+0

我正确编辑了我的代码,但没有发生任何错误,所有事情都正常运行。 – user3396072

回答

0

您的客户端代码不会读取它从服务器获取的消息。

我编译并执行了你的代码,仔细检查是否是这个问题。

只需在客户端的while循环的末尾添加read(s, ...);电话:

while(strcmp(buffer,"halt")!=0 && strcmp(buffer,"quit")!=0){ 
    bzero(buffer,MAXSIZE); 
    write(1,output,strlen(output)); 
    r=read(0,buffer,sizeof(buffer)); 
    buffer[r-1]='\0'; 
    write(s,buffer,strlen(buffer)); 
    read(s, buffer, sizeof(buffer)); 
    printf("Answer from server: %s\n",buffer); 
} 
+0

非常感谢你的问题。 :) – user3396072

+1

'缓冲区[r-1] ='\ 0''splats最后收到的字符。 – ThingyWotsit

相关问题