当前位置:  技术问答>linux和unix

问个recv函数的问题

    来源: 互联网  发布时间:2016-03-21

    本文导语:  想实现通过socket来发送命令,即服务器端每次收到命令处理后继续等待客户端发送来的命令,用了seng、recv函数,这两函数都是阻塞的。 客户端有程序: ...... if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)...

想实现通过socket来发送命令,即服务器端每次收到命令处理后继续等待客户端发送来的命令,用了seng、recv函数,这两函数都是阻塞的。
客户端有程序:
......
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}
if ((sendbytes=send(sockfd,buf,6,0))==-1)
{
perror("send");
exit(1);
......
服务器端程序:
if ((new_sock = accept(serv_sock, (struct sockaddr *)&their_addr, &sin_size)) == -1)
{
exit_fatal("accept");
}
......
while(1)
{
   ......
   if((recvbytes = recv(new_sock,buf,6,0))==-1)
   {
             exit_fatal("recv");
   }
   ......   
}
......
但最后测试的结果却是客户端发送一次后,如命令字是AAAAAA,服务器端却会连续的调用recv函数接受到AAAAAA
即最后结果是
AAAAAA
AAAAAA
AAAAAA
AAAAAA
......
怎么会出现这种情况呢,如何修改才能使服务器端收到一个AAAAAA后等待客户端继续发送命令呢。
谢谢

|
同楼上,或者把你的exit_tatal("recv")换成break;也行。

|
man recv

RETURN VALUE
       These  calls  return the number of bytes received, or -1 if an error occurred. The return value will be 0
       when the peer has performed an orderly shutdown.
对方已经关了socket,所以你这个应该是正常的.你不能要求你的服务器还是一直阻塞的当你的客户端都已经关掉了socket的时候.

|
用下面的这个RECV函数应该可以,需要指定等待时间
int recvlen(int iSocketID,char *buf,int length){/***接收指定长度数据***/    
    int  nTotalLen;                                                         
    int  nSubLen;                                                           
    int  nShouldLen;                                                        
    int iRc;                                                                
    iRc=nTotalLen=nSubLen=nShouldLen=0;                                     
    nShouldLen=length;                                                      
    while(nTotalLen

    
 
 

您可能感兴趣的文章:

  • 对recv函数第四个参数置0的疑问
  • 关于recv函数的问题
  • socket编程:recv(...)函数问题求救
  • 请教soclet中recv()函数最大返回值的问题
  • linux 网络编程 recv函数
  • linux c 网络编程时用 recv 函数
  • 关于recv函数的问题 iis7站长之家
  • 请问 : read, 与recv 两个函数有什么区别啊?
  • socket编程中的函数send和recv如何被信号中断?
  • Linux下怎么用read或recv函数完全接收socket发来的数据?
  • 谁知道solaris对socket的recv和send函数是否是原子操作,谢谢!!
  • linux下网络通信使用接受函数recv()问题?
  • 关于socket编程的一个难点:recv()函数的返回问题!
  • 做socket程序,用recv,send这些函数好还是用fread,fwrite好?
  • 哪位高手可以解释一下为什么Linux下的socket函数recv(),不被信号中断掉?
  • tcp中使用recv函数cpu占用率99%
  • 请问下linux SOCKET recv()函数如何被中断,小弟急呀大家帮忙 马上给分
  • 测试服务器并发性能的客户端程序阻塞在 recv 函数处,大家帮忙看看什么原因?
  • 关于socket的send(),recv()的问题.
  • 求助:关于单线程recv时的超时问题
  • recv的问题~
  • 急!嵌入式linux下socket编程,recv()的问题:
  • ##socket编程中send&recv的问题
  • 求救:如何用select解决recv的阻塞问题
  • Connection reset by peer: JVM_recv in socket input stream read这个问题到底怎么解决??
  • recv的问题
  • linux c socket recv问题
  • 【急问】:关于send()和recv()的问题
  • 专门为难C或unix高手,recv或read之超时问题
  • recv读取套接字返回值问题
  • recv效率低下的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • recv如何使用?
  • 虚拟机的linux,在其中运行Server和Client,Server端send了一个大小4096B的包,客户端recv到3845B,用netstat查看连接,Recv-Q和Send-Q项显示为0,为什么没收完?其余字节哪去了??
  • socket编程 是recv阻塞
  • recv在什么情况下会返回0
  • socket tcp 关于 alarm() 和 recv() ?
  • linux c recv
  • recv 接收 ,接收空间不够大, 可以通过什么知道?
  • socket中的疑问:read,write和send,recv的区别
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • recv无法接受数据
  • recv返回值大于要得到的大小?
  • solaris socket 非阻塞recv产生 EBADF 错误
  • 为何我windows下面send 成功了。 。。但是linux的recv确返回 0
  • 如何在recv时判断出对方已中断连接?
  • 请教,socket中recv不能一次完全接收send发送的字节数?
  • 菜鸟急问,我的recv()为什么只能接收1448个字符?
  • socket通讯时如何为线程池分配Recv任务?
  • 在Linux系统上recv返回错误,通过errno得到的错误消息为"Interrupted system call"
  • 服务器上出现1024个 SYN-RECV 连接,请问是怎么回事啊?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3