socket编程 总是accept error 新手入门 希望大家帮帮忙 具体代码如下,该怎么解决

socket编程 总是accept error 新手入门 希望大家帮帮忙 具体代码如下
这个程序是想实现客户机发送256个字符,服务器将这256个字符顺序颠倒然后返回

server.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <signal.h>
#define SERVER_PORT 8086
#define BACKLOG 5

void serv_respon(int sockfd)
{
  int nbytes;
  char buf_send[1024];
  char buf_recv[1024];

  nbytes=read(sockfd,buf_recv,256);
  if(nbytes==0)
  {
    return;
  }
  else if(nbytes<0)
  {
   fprintf(stderr,"read error");
   exit(1);
  }
  char*pc_recv=buf_recv+255;
  char*pc_send=buf_send;
  int i;
 
  for(i=0;i<256;i++)
  {
    *pc_send=*pc_recv;
    pc_send++;
    pc_recv--;
  }

  nbytes=write(sockfd,buf_send,256);
  if(nbytes<0)
  {
    fprintf(stderr,"write error");
    exit(1);
  }
}

int main( )
{
  int listenfd,connfd,addrlen;
  struct sockaddr_in servaddr,clientaddr;
  listenfd=socket(AF_INET,SOCK_STREAM,0);
  if(listenfd<0)
  {
    fprintf(stderr,"socket error");
    exit(1);
  }
  bzero(&servaddr,sizeof(servaddr));
  servaddr.sin_family=AF_INET;
  servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  servaddr.sin_port=htons(SERVER_PORT);
  if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
  {
    fprintf(stderr,"bind error");
    exit(1);
  }
  addrlen = sizeof(servaddr);
  for(;;)
  {
    connfd=accept(listenfd,(struct sockaddr*)&clientaddr,&addrlen);
    if(connfd == -1)
    {
      fprintf(stderr,"accept error");
     exit(1);
    }
    serv_respon(connfd);
    close(connfd);
  }
  close(listenfd);
}


client.c
#include <stdlib.h>
#include <time.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <signal.h>
#define SERVER_PORT 8086

void cli_requ(int sockfd)
{
  char buf[1024];
  int i,n;
  srand((unsigned)time(NULL));
  for(i=0;i<256;i++)
  {
    buf[i]=random()%(256);
  }
  int nbytes=write(sockfd,buf,256);
  if(nbytes<0)
  {
     fprintf(stderr,"write error");
     exit(1);
  }
  nbytes=read(sockfd,buf,512);
  if(nbytes<0||nbytes==0)
  {
  fprintf(stderr,"read error");
  exit(1);
  }
}


int main( )
{
   int sockfd;
   struct sockaddr_in servaddr;
   sockfd=socket(AF_INET,SOCK_STREAM,0);
   if(sockfd<0)
   {
     fprintf(stderr,"socket error"); 
     exit(1);
   }
   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family=AF_INET;
   servaddr.sin_port=htons(SERVER_PORT);
   if(inet_aton("127.0.0.1",&servaddr.sin_addr.s_addr)==-1)
   {
     fprintf(stderr,"addr convert error");
     exit(1);
   }
   if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
   {
    fprintf(stderr,"connect error");
    exit(1);
   }
   cli_requ(sockfd);
   close(sockfd);
}


------解决方案--------------------
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);

改成:
servaddr.sin_addr.s_addr=INADDR_ANY;

htonl是把端口号改成大端模式的,这接收的是ip地址,不答界的
------解决方案--------------------
你这是基于tcp的服务器端bind函数之后还要listen()才能用accept()。
------解决方案--------------------
引用:
哦,你应该说的是不搭边吧?


------解决方案--------------------
看到caoshufengcao的回复, 直接瞎眼了...

你是专门误导人的?
------解决方案--------------------
引用:
你这是基于tcp的服务器端bind函数之后还要listen()才能用accept()。