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个字节写入套接字。请提供用于写入的代码。您好!我发现了问题,我必须创建循环以供读取。