+ -
当前位置:首页 → 问答吧 → 再次请教linux下C语言udp socket编程问题

再次请教linux下C语言udp socket编程问题

时间:2010-07-27

来源:互联网

server_addr.sin_addr=*((struct in_addr *)(host->h_addr));
我看一个教程上明明是这样写的,可编译出现错误: dereferencing pointer to incomplete type
在一些论坛上也看到了一模一样的问题,可还是没有给出解决的办法,google上也搜索过,只能来这里请教各位了,我的host是这样定义的struct hostent *host;
  再次谢谢各位

作者: killerezero   发布时间: 2010-07-27



QUOTE:
server_addr.sin_addr=*((struct in_addr *)(host->h_addr));
我看一个教程上明明是这样写的,可编译出现错 ...
killerezero 发表于 2010-07-27 17:04




    给你个例子
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <netdb.h>
  6. #include <sys/types.h>
  7. #include <netinet/in.h>
  8. #include <sys/socket.h>
  9. #include <unistd.h>

  10. int main(int argc, char *argv[])
  11. {
  12.     int sockfd;
  13.     char buffer[1024];
  14.     struct sockaddr_in server_addr;
  15.     struct hostent *host;
  16.     int portnumber,nbytes;
  17.     if(argc!=3)
  18.     {
  19.         fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
  20.         exit(1);
  21.     }
  22.     if((host=gethostbyname(argv[1]))==NULL)
  23.     {
  24.         fprintf(stderr,"Gethostname error\n");
  25.         exit(1);
  26.     }
  27.     if((portnumber=atoi(argv[2]))<0)
  28.     {
  29.         fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
  30.         exit(1);
  31.     }
  32.     /* 客户程序开始建立 sockfd描述符 */
  33.     if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
  34.     {
  35.         fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
  36.         exit(1);
  37.     }
  38.     /* 客户程序填充服务端的资料 */
  39.     bzero(&server_addr,sizeof(server_addr));
  40.     server_addr.sin_family=AF_INET;
  41.     server_addr.sin_port=htons(portnumber);
  42.     server_addr.sin_addr=*((struct in_addr *)host->h_addr);
  43.     /* 客户程序发起连接请求 */
  44.     if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)
  45.               )==-1)
  46.     {
  47.         fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
  48.         exit(1);
  49.     }
  50.     /* 连接成功了 */
  51.     if((nbytes=read(sockfd,buffer,1024))==-1)
  52.     {
  53.         fprintf(stderr,"Read Error:%s\n",strerror(errno));
  54.         exit(1);
  55.     }
  56.     buffer[nbytes]='\0';
  57.     printf("I have received:%s\n",buffer);
  58.     /* 结束通讯 */
  59.     close(sockfd);
  60.     exit(0);
  61. }
复制代码

作者: rain_fish   发布时间: 2010-07-27

我编译了,成功的。。。

作者: rain_fish   发布时间: 2010-07-27