免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1537 | 回复: 1
打印 上一主题 下一主题

linux下 服务器端的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-10 09:11 |只看该作者 |倒序浏览
#include   <sys/socket.h>     
  #include   <stdio.h>     
  #include   <string.h>     
  #include   <errno.h>     
  #include   <netdb.h>     
  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!   How   are   you?\n";     
  if(argc!=2)     
  {     
  fprintf(stderr,"Usage:%s   Need   portnumber\a\n",argv[0]);     
  exit(1);     
  }     
  if((portnumber=atoi(argv[1]))<0)     
  {     
  fprintf(stderr,"Usage:%s   portnumber\a\n",argv[0]);     
  exit(1);     
  }     
  /*   服务器端开始建立socket描述符   */     
  if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)     
  {     
  fprintf(stderr,"Socket   error:%s\n\a",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);   //   如果serv定义为网际套接口地址结     
  //构,那么serv.sin_addr给出的32位IPv4地址将是一个in_addr结构,而serv.sin_addr.s_addr     
  //给出的32位IPv4地址则是一个in_addr_t(通常是无符号的32位整数)。     
  server_addr.sin_port=htons(portnumber);     
  /*   捆绑sockfd描述符   */     
  if(bind(sockfd,(struct   sockaddr   *)(&server_addr),sizeof(struct   sockaddr))==-1)     
  {     
  fprintf(stderr,"Bind   error:%s\n\a",strerror(errno));     
  exit(1);     
  }     
  /*   监听sockfd描述符   */     
  if(listen(sockfd,5)==-1)     
  {     
  fprintf(stderr,"Listen   error:%s\n\a",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:%s\n\a",strerror(errno));   exit(1);     
  }     
  fprintf(stderr,"Server   get   connection   from   %s\n",   inet_ntoa(client_addr.sin_addr));     
  if(write(new_fd,hello,strlen(hello))==-1)     
  {     
  fprintf(stderr,"Write   Error:%s\n",strerror(errno));     
  exit(1);     
  }   /*   这个通讯已经结束   */     
  close(new_fd);     
  /*   循环下一个   */     
  }     
  close(sockfd);     
  exit(0);     
  }     
这个程序我在Magic C++下运行老是出现这个错误,
dd.cpp: In function `int main(int, char**)':
//39/home/zhangdaoxin/TEst/TTT/ddd/dd.cpp(55):  error: invalid conversion from `int*' to `socklen_t*'
//39/home/zhangdaoxin/TEst/TTT/ddd/dd.cpp(55):  error:   initializing argument 3 of `int accept(int, sockaddr*, socklen_t*)'
make: *** [dd.o] 错误 1



请高手帮一下.

论坛徽章:
0
2 [报告]
发表于 2007-02-10 10:18 |只看该作者
invalid conversion from `int*' to `socklen_t*' initializing argument 3 of `int accept(int, sockaddr*, socklen_t*)'

1、你注意看 accept() 的声明了吗,明明是 socklen_t * 你却坚持要用 int *
2、错误信息已经给出,自己改吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP