socket客户端问题

月光莫利亚 2006-04-12 02:20:29
我用c在红帽系统中写了一个socket客户端的小程序,但用gcc编译的时候总通不过,出问题的那一句代码是:
struct hostent * he;
struct sockaddr_in their_addr;
中间略
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
编译时gcc提示:dereferencing pointer to incomplete type
请问这个如何解决!!!
下面是全部代码,分数不够再加。
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvg 2006-04-12
  • 打赏
  • 举报
回复
their_addr.sin_addr = *((struct in_addr *)(he->h_addr));
可以这样的
their_addr.sin_addr.s_addr =inet_addr("xxx.xxx.xxx.xxx");

lpman2005 2006-04-12
  • 打赏
  • 举报
回复
在struct hostent结构中定义为
#define h_addr h_addr_list[0]

h_addr本身已定义为第一个IP地址,我认为应该去掉*((struct in_addr *)he->h_addr);
最前面的*
darkstar21cn 2006-04-12
  • 打赏
  • 举报
回复
少了一个头文件
#include <netdb.h>
不过还是建议你看看hostent的定义


月光莫利亚 2006-04-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 3490
#define MAXDATASIZE 100

int main(int argc, char * argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct hostent * he;
struct sockaddr_in their_addr;
if(argc != 2)
{
fprintf(stderr,"usage:client hostname");
exit(1);
}
if((he=gethostbyname(argv[1]))==NULL)
{
herror("gethostbyname");
exit(1);
}
if(sockfd = socket(AF_INET,SOCK_STREAM,0) == -1)
{
perror("socket");
exit(1);
}
their_addr.sin_family=AF_INET;
their_addr.sin_port=htons(PORT);
their_addr.sin_addr = *((struct in_addr *)(he->h_addr));
bzero(&(their_addr.sin_zero),8);
if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
if((numbytes=recv(sockfd,buf,MAXDATASIZE,0)) == -1)
{
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Received:%s",buf);
close(sockfd);
return 0;
}

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧