用了一recv次之后为什么不能继续发送数据?

jiangjian0427 2005-10-06 02:14:22
//main 代码段,不停的读入输入,再发送到服务器,接受返回的信息,为什么只有第一次可以,第二次就不行了?
int s;
struct sockaddr_in addr;
fd_set writefds;
char buffer[256];
struct timeval tv;
int len;
unsigned long ip;
char c;
ip = inet_addr(SERVER_IP);
if((s = socket(AF_INET,SOCK_STREAM,0))<0){
printf("socket");
exit(1);
}
memset( &addr,'\0',sizeof(addr) );
addr.sin_family = AF_INET;
addr.sin_port=htons(PORT);
addr.sin_addr.s_addr = ip;
bzero(&(addr.sin_zero), 8);
if(connect(s,(struct sockaddr *)&addr,sizeof(addr))<0){
printf("connect");
exit(1);
}
recv(s,buffer,sizeof(buffer),0);
printf("%s\n",buffer);
int i= 1;
while(1){
bzero(buffer,sizeof(buffer));
read(STDIN_FILENO,buffer,sizeof(buffer));
if((len = send(s,buffer,sizeof(buffer),0))<0){
printf("send");
exit(1);
}
recv(s,buffer,sizeof(buffer),0);
printf("%s\n",buffer);
}
...全文
124 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxywh 2005-10-08
  • 打赏
  • 举报
回复
send函数的用法没有问题,需要注意read函数是组塞型函数.建议用gdb调试.
yyy790601 2005-10-08
  • 打赏
  • 举报
回复
根据客户端情况,是recv->send->recv。
那么建议看看服务端代码,是否是send->recv->send,既然第一次可以,一般就不是程序问题,可能是逻辑问题。
tb01412 2005-10-07
  • 打赏
  • 举报
回复
关键是找到出错的那一行代码,你可以用printf的方法,也可以用GDB来调试,找到出错的地方就明白是什么问题了
jiangjian0427 2005-10-07
  • 打赏
  • 举报
回复
原因我不知道
现象就是只能SEND一次数据过去
第二次就不可以

不过connect的时候recv没有问题
是不是send的用法有问题?
tb01412 2005-10-06
  • 打赏
  • 举报
回复
你是指程序阻塞在倒数第二句代码上了吗???还是指其它意思呢?

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧