当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 无限纠结,发帖求助,TCP套接字程序编译总是通不过~
帖子发表于 : 2009-10-21 16:04 

注册: 2009-09-23 18:19
帖子: 17
送出感谢: 0 次
接收感谢: 0 次
程序如下

#include <stdio.h>
#include <unistd.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define PORT 1234
#define MAXDATASIZE 100

int main(int argc,char *argv[])
{
int sockfd,num;
char buf[MAXDATASIZE];
struct hostnet *he;
struct sockaddr_in server;

if(argc!=2)
{
printf("Usage:%s <IP Address>\n",argv[0]);
exit(1);
}

if((he=gethostbyname(argv[1]))==NULL)
{
printf("Gethostbyname() error\n");
exit(1);
}

if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
printf("socket() error\n");
exit(1);
}

bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr=*((struct in_addr *)he->h_addr);
if(connect(sockfd,(struct sockaddr *)&server,sizeof(server))==-1)
{
printf("connect() error\n");
exit(1);
}

if((num=recv(sockfd,buf,MAXDATASIZE,0))==-1);
{
printf("recv() error\n");
exit(1);
}
buf[num-1]='\0';
printf("server message:%s\n",buf);
close(sockfd);
}

基本的TCP套接字编程的客户端程序。
红色的地方是提示错误的地方。
用的是Anjuta,对工程编译总是出现“error:dereferencing pointer to imcomplete type"
搜了半天,有人说是有些头函数没正确包含进去。试过在终端直接用gcc直接编译,但是又变成缺少文件config.h之类的错误。
崩溃中~求教了


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 无限纠结,发帖求助,TCP套接字程序编译总是通不过~
帖子发表于 : 2009-10-21 22:52 
头像

注册: 2009-02-24 13:07
帖子: 40
送出感谢: 0 次
接收感谢: 0 次
dereferencing pointer to imcomplete type 这个错误通常是因为结构体没有定义,在你的程序里的话就是struct in_addr没有定义,是不是少包含了某些头文件?
另外建议给出直接使用gcc编译时完整的编译指令和完整的错误信息,这样才能更好地判断错误在哪


_________________
叫我greensea吧 [@lvhai]

虽然现在这个用户名是midoriumi,但实际上是我把自己注册的greensea的密码给忘记了,于是只好再注册一个midoriumi,字面意思也和greensea一样是緑海(みどりうみ)。所以,叫我greensea或GS吧。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 无限纠结,发帖求助,TCP套接字程序编译总是通不过~
帖子发表于 : 2009-10-21 23:11 
头像

注册: 2008-03-25 15:49
帖子: 25876
地址: 谁知道?
送出感谢: 8
接收感谢: 10
纠结啊纠结
职业帮顶


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 无限纠结,发帖求助,TCP套接字程序编译总是通不过~
帖子发表于 : 2009-11-22 22:17 

注册: 2009-05-21 12:29
帖子: 11
送出感谢: 0 次
接收感谢: 0 次
我们都在看同一本书,我也是那样写,结果也是编译不通过。

刚才我将in_addr改成struct in_addr就可以了。

你试试


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 无限纠结,发帖求助,TCP套接字程序编译总是通不过~
帖子发表于 : 2009-11-26 23:22 

注册: 2009-11-19 16:26
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
经测试,楼主代码存在如下问题:
1.主机信息结构体名字搞错了,是hostent,不是hostnet.
2.server.sin_addr=*((struct in_addr *)he->h_addr);
这句不对,hostent中的h_addr结构体是二维字符数组,取其中一个地址赋值给服务器的地址可以用:
server.sin_addr = *((struct in_addr *)*he->h_addr_list); /*取第一个地址*/
3.差一个exit的头文件<stdlib.h>


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译