日期:2014-05-16  浏览次数:20687 次

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)
&nbs