C 客户端未从服务器接收消息

C 客户端未从服务器接收消息,c,sockets,C,Sockets,我正在从服务器向客户端发送消息(问候语)。服务器发送数据,但客户端没有接收到数据,然后服务器跳转到读取,因为客户端必须用用户的输入进行回复。你能告诉我为什么我从来没有收到问候语吗 服务器: int main(int argc, char **argv) { int listenfd, connfd; socklen_t len; struct sockaddr_in servaddr, cliaddr; cha

我正在从服务器向客户端发送消息(问候语)。服务器发送数据,但客户端没有接收到数据,然后服务器跳转到读取,因为客户端必须用用户的输入进行回复。你能告诉我为什么我从来没有收到问候语吗

服务器:

int
main(int argc, char **argv)
{
    int                 listenfd, connfd;
    socklen_t           len;
    struct sockaddr_in  servaddr, cliaddr;
    char                buff[MAXLINE];
    time_t              ticks;
    char                message[50];
    char                temp_scale[2];
    char                recvdata[MAXLINE + 1];

    listenfd = Socket(AF_INET, SOCK_STREAM, 0);
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);/*----------------------------------------------------*/
    servaddr.sin_port        = htons(5678); 

    Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
    Listen(listenfd, LISTENQ);
    printf("Listening on port 5678...Press Ctrl+C to end server\n");
    printf("Waiting for incoming connections...\n");

    for ( ; ; )
    {
        len = sizeof(cliaddr);
        connfd = Accept(listenfd, (SA *) &cliaddr, &len);

        /*Client connects to server*/
        printf("Connection from %s, port %d\n",
               Inet_ntop(AF_INET, &cliaddr.sin_addr, buff, sizeof(buff)),
               ntohs(cliaddr.sin_port));

        snprintf(message, sizeof(message), "%s\r\n", "Welcome!");
        Writen(connfd, message, strlen(message));
        while ( (n = read(connfd, recvdata, MAXLINE)) > 0)
            {
             recvdata[n] = 0;   /* null terminate*/
             if (fputs(recvdata, stdout) == EOF)
                 err_sys("fputs error");
            }
        if (n < 0)
         err_sys("read error");

    Close(connfd);
    }
}
int
主(内部argc,字符**argv)
{
int listenfd,connfd;
索克伦;
servaddr、cliaddr中的结构sockaddr\u;
字符buff[MAXLINE];
时间滴答;
字符消息[50];
煤焦温度标度[2];
char recvdata[MAXLINE+1];
listenfd=套接字(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin\u addr.s\u addr=htonl(INADDR\u ANY)/*----------------------------------------------------*/
servaddr.sinu port=htons(5678);
绑定(listenfd,(SA*)&servaddr,sizeof(servaddr));
听(listenfd,LISTENQ);
printf(“侦听端口5678…按Ctrl+C结束服务器\n”);
printf(“等待传入连接…\n”);
对于(;;)
{
len=sizeof(cliaddr);
connfd=Accept(listenfd,(SA*)和cliaddr,&len);
/*客户端连接到服务器*/
printf(“从%s连接,端口%d\n”,
Inet_ntop(AF_Inet和cliaddr.sin_addr,buff,sizeof(buff)),
ntohs(cliaddr.sin_港);
snprintf(消息,sizeof(消息),“%s\r\n”,“欢迎!”);
写入(connfd,message,strlen(message));
而((n=read(connfd,recvdata,MAXLINE))>0)
{
recvdata[n]=0;/*null终止*/
if(FPUT(接收数据、标准输出)=EOF)
错误系统(“fputs错误”);
}
if(n<0)
错误系统(“读取错误”);
关闭(connfd);
}
}
客户:

int
main(int argc, char **argv)
{
    int                 sockfd, n;
    socklen_t           len;
    char                recvline[MAXLINE + 1];
    struct sockaddr_in  servaddr, cliaddr;
    char  scale[2];

    /*if (argc != 2)
        err_quit("usage: a.out <IPaddress>");*/

    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        err_sys("socket error");

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port   = htons(atoi(argv[2])); /*port passed through command line*/
    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) /*The client translates the server address, passed on the command line*/
        err_quit("inet_pton error for %s", argv[1]);

    printf("Connect...\n");
    if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
        err_sys("connect error");

    len = sizeof(cliaddr);
    Getsockname(sockfd, (SA *) &cliaddr, &len);
    printf("Local Address is: %s\n",
           Sock_ntop((SA *) &cliaddr, sizeof(cliaddr))); 

    while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
        recvline[n] = 0;    /* null terminate */
        if (fputs(recvline, stdout) == EOF)
            err_sys("fputs error");
    }
    if (n < 0)
     err_sys("read error");

    printf("Enter the thermal Unit ('C' Celsius, 'F' Farehnheit: ");
    send_data(sockfd);

    exit(0);
}
int
主(内部argc,字符**argv)
{
int-sockfd,n;
索克伦;
char recvline[MAXLINE+1];
servaddr、cliaddr中的结构sockaddr\u;
煤焦标度[2];
/*如果(argc!=2)
err_quit(“用法:a.out”)*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
err_sys(“套接字错误”);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(atoi(argv[2]);/*端口通过命令行传递*/
if(inet\u pton(AF\u inet,argv[1],&servaddr.sin\u addr)0){
recvline[n]=0;/*null终止*/
if(fputs(接收线、标准输出)=EOF)
错误系统(“fputs错误”);
}
if(n<0)
错误系统(“读取错误”);
printf(“输入热量单位('C'摄氏度,'F'法伦海特:);
发送_数据(sockfd);
出口(0);
}

谢谢!

Writen()函数的作用是什么?将n个字节写入套接字。请提供用于写入的代码。您好!我发现了问题,我必须创建循环以供读取。