linux 空信息,为什么recv()函数收到空消息?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

服务器端程序如下:

#include"stdio.h"

#include"sys/socket.h"

#include"netdb.h"

#define IP "127.0.0.1"

#define PORT 300

int main()

{

char msg[50];

struct sockaddr_in ad;

int s,len,adlen,news;

if((s=socket(AF_INET,SOCK_STREAM,0))<0)

{

printf("error!");

}

else

{

printf("Socket Created!\n");

printf("Socket:%d\n",s);

}

bzero(&ad,sizeof(ad));

ad.sin_port=htons(PORT);

ad.sin_addr.s_addr=inet_addr(IP);

ad.sin_family=AF_INET;

len=sizeof(msg);

adlen=sizeof(struct sockaddr_in);

if(bind(s,(struct sockaddr *)&ad,adlen)<0)

printf("error!");

else

printf("Have binded!\n");

if(listen(s,3)<0)

perror("listen");

else

printf("listen.........\n");

if( (news=accept(s,(struct sockaddr *)&ad,&adlen) )<0 )

perror("accept");

else

printf("have accepted!\n");

while(1)

{

bzero(msg,len);

recv(news,msg,len,0);

printf("Receve:%s",msg);

send(news,msg,len,0);

}

}

客户端程序如下:

#include"stdio.h"

#include"sys/socket.h"

#include"netdb.h"

#include"unistd.h"

#define IP "127.0.0.1"

#define PORT 300

int main()

{

char msg[20];

struct sockaddr_in ad;

int s,len,adlen,i=0;

if((s=socket(AF_INET,SOCK_STREAM,0))<0)

{

printf("error!");

}

else

printf("Socket Created!\n");

bzero(&ad,sizeof(ad));

ad.sin_port=htons(PORT);

ad.sin_addr.s_addr=inet_addr(IP);

ad.sin_family=AF_INET;

len=sizeof(msg);

adlen=sizeof(struct sockaddr_in);

if(connect(s,(struct sockaddr *)&ad,adlen)<0)

printf("error!");

else

printf("Have Connected!\n");

while(1)

{

bzero(msg,len);

len=read(STDIN_FILENO,msg,sizeof(msg));

send(s,msg,len,0);

recv(s,msg,len,0);

printf("Receve:%s\n",msg);

}

}

问题:为什么客户端向服务器发送字符串时,服务器可以收到。但是客户机只第一次能收到服务器返回的字符串,以后就无法收到服务器返回的字符串?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值