C 客户端无法向服务器发送消息

C 客户端无法向服务器发送消息,c,linux,sockets,client,server,C,Linux,Sockets,Client,Server,我不熟悉C语言中的套接字编程。 我正在尝试创建一个能够连接到多个客户端的服务器。但是, 服务器端无法打印我的邮件。这意味着代码不会在提示时停止,您想发送什么 wards客户端上的第二条消息未响应交换机选择 我的Server.c看起来像 编辑1我已经编辑了允许客户端发送消息的代码。然而,服务器端在ACCEPT:bad文件描述符出错时停止,我无法解析该描述符 编辑2我的客户端也在继续发送第二条消息,但是我的服务器没有收到并打印它,即使Accept上的错误消失了 ----- listen(sockfd

我不熟悉C语言中的套接字编程。 我正在尝试创建一个能够连接到多个客户端的服务器。但是,

服务器端无法打印我的邮件。这意味着代码不会在提示时停止,您想发送什么

wards客户端上的第二条消息未响应交换机选择 我的Server.c看起来像

编辑1我已经编辑了允许客户端发送消息的代码。然而,服务器端在ACCEPT:bad文件描述符出错时停止,我无法解析该描述符

编辑2我的客户端也在继续发送第二条消息,但是我的服务器没有收到并打印它,即使Accept上的错误消失了

-----
listen(sockfd,5);
clilen = sizeof(cli_add);
int pid;

while(1){
    newsockfd = accept(sockfd, (struct sockaddr *)&cli_add, &clilen);
    if (newsockfd < 0){
        error ("Error on accept");
        exit(1);
    }

    pid=fork();
    if (pid < 0) {
                error("ERROR in new process creation");
                exit(1);
        }
    if (pid==0){
            close(sockfd);
            //read the buffer from socket    
            bzero(buffer, 256);
            n = read(newsockfd, buffer,255);
            if (n<0){
                error("Error reading");
                exit(1);
            }  
            printf("The message : %s", buffer);

        -----
            bzero(buffer,256);
            n=write(newsockfd,tmparray,strlen(tmparray));
            if (n<0)
                 error("oops! can't write");

            exit(0);
        }else{
            close(newsockfd);
        }
}
而client.c是

    int choice;
    while(1){
    printf("what to do?\n1.Send\n2.Exit\n");
    scanf("%d",&choice);
    switch(choice){
        case 1:
        {
            bzero(buffer, 256);
            printf("What do you want to send? ");
            fgets(buffer,255,stdin);
            getchar();
            n=write(sockfd,buffer,255);
            if (n<0)
                error("oops! can't write");


            bzero(buffer,256);
            n= read(sockfd, buffer, 255);
            if (n<0)
                error("OOPS! can't read");
            printf("Received message : %s\n", buffer );
            break;

        }
        case 2:{
            return 0;
        }
    }
}

与您的问题无关,但修改了address length参数,因此您不能简单地在循环外设置它一次,您必须在每次调用accept之前设置它。在scanf之后,stdin中有一个剩余的换行符。收到并发送一条空消息。谢谢您的帮助。解决问题的最后一个代码是edit3