学习Linux网络编程之二

文章作者 100test 发表时间 2007:03:14 16:19:20
来源 100Test.Com百考试题网


  2.6 实例

  服务器端程序


  /******* 服务器程序 (server.c) ************/
  #include
  #include
  #include
  #include
  #include
  #include
  #include
  #include

  int main(int argc, char *argv[])
  {
  int sockfd,new_fd.
  struct sockaddr_in server_addr.
  struct sockaddr_in client_addr.
  int sin_size,portnumber.
  char hello[]="Hello! Are You Fine?n".

  if(argc!=2)
  {
  fprintf(stderr,"Usage:%s portnumberan",argv[0]).
  exit(1).
  }

  if((portnumber=atoi(argv[1]))<0)
  {
  fprintf(stderr,"Usage:%s portnumberan",argv[0]).
  exit(1).
  }

  /* 服务器端开始建立socket描述符 */
  if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
  {
  fprintf(stderr,"Socket error:%sna",strerror(errno)).
  exit(1).
  }

  /* 服务器端填充 sockaddr结构 */
  bzero(&.server_addr,sizeof(struct sockaddr_in)).
  server_addr.sin_family=AF_INET.
  server_addr.sin_addr.s_addr=htonl(INADDR_ANY).
  server_addr.sin_port=htons(portnumber).

  /* 捆绑sockfd描述符 */
  if(bind(sockfd,(struct sockaddr *)(&.server_addr),sizeof(struct sockaddr))==-1)
  {
  fprintf(stderr,"Bind error:%sna",strerror(errno)).
  exit(1).
  }

  /* 监听sockfd描述符 */
  if(listen(sockfd,5)==-1)
  {
  fprintf(stderr,"Listen error:%sna",strerror(errno)).
  exit(1).
  }

  while(1)
  {
  /* 服务器阻塞,直到客户程序建立连接 */
  sin_size=sizeof(struct sockaddr_in).
  if((new_fd=accept(sockfd,(struct sockaddr *)(&.client_addr),&.sin_size))==-1)
  {
  fprintf(stderr,"Accept error:%sna",strerror(errno)).
  exit(1).
  }

  fprintf(stderr,"Server get connection from %sn",
  inet_ntoa(client_addr.sin_addr)).
  if(write(new_fd,hello,strlen(hello))==-1)
  {
  fprintf(stderr,"Write Error:%sn",strerror(errno)).
  exit(1).
  }
  /* 这个通讯已经结束 */
  close(new_fd).
  /* 循环下一个 */
  }
  close(sockfd).
  exit(0).
  }


相关文章


简述Linux操作系统文件搜索(下)
找回Linux_Unix下各系统的密码 下
用GNUprofiler提高代码运行速度 上
用GNUprofiler提高代码运行速度 下
学习Linux网络编程之二
linux的域名解析系统设置
学习Linux网络编程之四
学习Linux网络编程之一
学习Linux网络编程之三
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛