winsock编程recv控制问题?

海蓝光科技 2003-08-26 10:35:32
我在用winsock编写简单的2台机子的通信程序
在服务端创建一个recv线程
void ServRead(void * ptr)
{
while(1)
{
memset(buf , 0 , 30);
if(recv(client_fd,buf,22,MSG_PEEK) == -1)
{
perror("recv error");
exit(1);
}
printf("%s" , buf);
}
客户端是这样的一个发送
while(1)
{
cin>>buff
write(sockfd, buff , 220)
bzero(buff, 20);
}
为什么服务端会一直读到客户端第一次发送的数据??应该怎么控制才能实现发送一条收到一次呢???
...全文
68 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mme 2003-08-26
  • 打赏
  • 举报
回复
不可能啊!你发送之后用Sleep(10);试试看.
你是不是看错了.recv每收到一条信息就会返回,返回之后缓冲区也被清零.不可能重复收.....
lyrzhlgq 2003-08-26
  • 打赏
  • 举报
回复
同意rockersz(天生我菜必有用)用recv接受Socket包时,一定是收到才终止函数执行的。所以用select查一下是不是有数据来
rockersz 2003-08-26
  • 打赏
  • 举报
回复
设置套接字为非锁定模式,每次recv数据时,先用select函数判断是否有数据可读,如为真,则调用recv接收
海蓝光科技 2003-08-26
  • 打赏
  • 举报
回复
多谢各位的知道该问题已经解决是参数的问题
farfh 2003-08-26
  • 打赏
  • 举报
回复
建议用send和recv相对应,另外,发送缓冲区和接收缓冲区要一致
  • 打赏
  • 举报
回复
看看recv参数的含义吧:
MS_PEEK:Peek at the incoming data. The data is copied into the buffer but is not removed from the input queue. The function then returns the number of bytes currently pending to receive.
zhouyong0371 2003-08-26
  • 打赏
  • 举报
回复
void ServRead(void * ptr)
{
while(1)
{
memset(buf , 0 , 30); //这里的数值是30
if(recv(client_fd,buf,22,MSG_PEEK) == -1) //这里22
{
perror("recv error");
exit(1);
}
printf("%s" , buf);
}
客户端是这样的一个发送
while(1)
{
cin>>buff
write(sockfd, buff , 220) //这里220,另为什么不用send
bzero(buff, 20); //这里20
}
海蓝光科技 2003-08-26
  • 打赏
  • 举报
回复
还是不行
屏幕是一直打印第一次收到的

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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