近日照书上的入门例子写了个socket程序,建立连接后,客户机发送“fuck”,服务器接收后,打印些信息,然后再向客户机发送字符串“hellohello”,现在问题是第一次发送时服务器能正常接收,但服务器向客户机send()时老是失败,(send返回-1),也就是说刚刚recv后接着send就会失败,费解,试着把顺序倒过来,服务器先发送,客户机接收,客户机接收后再向服务器发送,也会失败,也就是send后接着recv也会失败,代码如下,各位大虾帮帮忙:
服务器:
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<time.h>
#include<errno.h>
int main(int argc,char **argv)
{
  int n,lisnfd,clinfd;
  lisnfd=socket(AF_INET,SOCK_STREAM,0);
  struct sockaddr_in addr;
  addr.sin_family=AF_INET;
  addr.sin_port=htons(83);
  addr.sin_addr.s_addr=htonl(INADDR_ANY);
  bind(lisnfd,(struct sockaddr *)&addr,sizeof(addr));
  listen(lisnfd,5);
  char buffer[5];
  for(;;)
    {
      // int n;                                                                 
      clinfd=accept(lisnfd,(struct sockaddr *)NULL,NULL);
  if(clinfd<0)
        printf("error");
                                             
      while((n=recv(clinfd,buffer,5,0))>0)
      {
        printf("%d \n",n);
        buffer[n]='\n';                                                
    
        fputs(buffer,stdout);
        printf("\n");
        }
      int k;
      k=send(clinfd,"hellohello",11,0);//recv后接着send,失败
  while(k<0)
    {
      k=send(clinfd,"hellohello",11,0);
      printf("%d \n",k);
}
                                      
      close(clinfd);
    }
}

客户机:

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<memory.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#define MAXSIZE 10
int main(int argc,char **argv)
{
  char buffer[MAXSIZE+1];
  int n,sockfd=socket(AF_INET,SOCK_STREAM,0);
  struct sockaddr_in addr;
  memset(&addr,0,sizeof(struct sockaddr_in));
  addr.sin_family=AF_INET;
  addr.sin_port=htons(83);
  inet_pton(AF_INET,"127.0.0.1",&addr.sin_addr);
  if(connect(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr))<0)
    {
      printf("error");
    }
 int y=send(sockfd,"fuck",5,0);
                               
  while((n=recv(sockfd,buffer,MAXSIZE,0))>0)  //send后接着recv,失败
   {
   buffer[n]='\n';
   fputs(buffer,stdout);
   }
    printf("hahaha\n");
  
       printf("%d \n",y);
        close(sockfd);
  return 0;

}