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

linux网络编程--客户端编译问题分析
我在编译客户端应用测试程序时出现了下面的问题,本人刚刚接触linux操作系统,还望各位前辈多多指导!谢谢各位了!
一下是源程序:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <netinet/in.h>

#define PORT 1234
#define BUF_SIZE 1024

int main(int argc,char **argv[])
{

  int sockfd,sendbytes;
  char buf[BUF_SIZE];
  struct hostent *host;  
  struct sockaddr_in serv_addr;
   
  if(argc<3)
  {
  fprintf(stderr,"./client hostname text\n");
  exit(1);
  }
   
  if((host = gethostbyname(argv[1])) == NULL)
  {
  perror("gethostbyname error");
  exit(1);  
  }
   

  memset(buf,0,sizeof(buf));
  sprintf(buf,"%s",argv[2]);  

  if((sockfd = socket(AF_INET,SOCK_SIREAM,0)) == -1)
  {
  perror("socket error");
  exit(1);
  }

  serv_addr.sin_family = AF_INET;
  serv_addr.sin_addr = *((struct in_addr*)(host->h_addr));//50行
  serv_addr.sin_port = htons(PORT);
   
  memset(serv_addr.sin_zero,0,8);

  if(connect(sockfd,(struct sockaddr*)&serv_addr, sizeof(struct sockaddr)) == -1)
  {
  perror("connect error");
  exit(1);
  }
   
  if((sendbytes = send(sockfd,buf,strlen(buf),0)) == -1)
  {
  perror("send error");
  exit(1);
  }
  printf("send success!\n");

  close(sockfd);
   
  exit(0);

}
下是编译出现的问题:
$ gcc -o client client.c

client.c 50:dereferencing pointer to incomplete type

麻烦请问出现问题的原因是什么,能否详细点,我是初学者对此知之甚少,先谢谢各位了。

















------解决方案--------------------
头文件没有包含全,可能需要 #include <netdb.h>
------解决方案--------------------
支持楼上

另外,还有两个问题
1、int main(int argc,char **argv[]) ==> int main(int argc,char **argv)
2、SOCK_SIREAM ==> SOCK_STREAM
------解决方案--------------------
LS已经说过了,再补充个

LZ调用send函数,该函数需要的头文件
#include <sys/types.h>
#include <socket.h>