免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: yufeng8552
打印 上一主题 下一主题

网络编程中的一个错误,搞不定,求助大家 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-01-03 22:37 |只看该作者

网络编程中的一个错误,搞不定,求助大家

//是能编译通过,可是有警告,你的难道连警告都没有?/
没有警告的啊我在HP-UX上试的啊

论坛徽章:
0
12 [报告]
发表于 2004-01-04 10:21 |只看该作者

网络编程中的一个错误,搞不定,求助大家

[quote]原帖由 "yufeng8552"][/quote 发表:


1.exit()是在stdlib.h中定义,以后哪个函数找不到定义,用man看一下这个函数,里面有它所需要的头文件。
2.源文件最后一行最好回车。

论坛徽章:
0
13 [报告]
发表于 2004-01-04 11:26 |只看该作者

网络编程中的一个错误,搞不定,求助大家

thx各位
我下午去机房试验下各位的意见,有什么情况再发上来,觉得网络编程还是很有意思的,继续钻研吧……

Linuxsir那边版主给我的意见:

libinary say:
1)我编译了一下你的程序,没遇到你说的错误。
不过client程序的:
  1. server.sin_addr = *((in_addr *)he->;h_addr); /*he->;h_addr passes "*he"'s info to "h_addr" */
复制代码

应该改成:
  1. if(inet_aton(he->;h_addr, &server.sin_addr) == 0){
  2. fprintf(stderr, "inet_aton error\n");
  3. exit(-1);
  4. }
复制代码


2)看一下man gethostbyname

  1. struct hostent {
  2.   char    *h_name;        /* official name of host */
  3.   char    **h_aliases;    /* alias list */
  4.   int     h_addrtype;     /* host address type */
  5.   int     h_length;       /* length of address */
  6.   char    **h_addr_list;  /* list of addresses */
  7. }
  8. #define h_addr  h_addr_list[0]  /* for backward compatibility */
复制代码


h_addr的类型是char *,不能直接赋值给sin_addr

有大哥能解释一下不?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2004-01-04 14:08 |只看该作者

网络编程中的一个错误,搞不定,求助大家

[quote]原帖由 "yufeng8552"][/quote 发表:

类型不一样,当然不能赋值了。
你看看这个函数inet_aton()
是做什么的不就知道了。

论坛徽章:
0
15 [报告]
发表于 2004-01-04 15:03 |只看该作者

网络编程中的一个错误,搞不定,求助大家

原帖由 "minichen" 发表:


1.exit()是在stdlib.h中定义,以后哪个函数找不到定义,用man看一下这个函数,里面有它所需要的头文件。
2.源文件最后一行最好回车。


我查过的,后来加入#include <stdlib.h>;后会出现下面的错误

[root@BillingServer unix]# gcc -o PRG6_1 PRG6_1.C
PRG6_1.C:89:2: warning: no newline at end of file
/tmp/ccGdH2Xw.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status


文件名换成小写的c

[root@BillingServer unix]# gcc -o PRG6_1 PRG6_1.c
PRG6_1.c:14: parse error before "sockaddr_in"
PRG6_1.c:66: parse error before "sockaddr_in"
PRG6_1.c: In function `process_cli':
PRG6_1.c:71: `client' undeclared (first use in this function)
PRG6_1.c:71: (Each undeclared identifier is reported only once
PRG6_1.c:71: for each function it appears in.)
PRG6_1.c:74: `connectfd' undeclared (first use in this function)
PRG6_1.c:79: `for' loop initial declaration used outside C99 mode
PRG6_1.c:89:2: warning: no newline at end of file


有网友提出是否是这个函数的问题:
void process_cli(int connectfd, struct sockaddr_in client);

可是后来我把sockaddr_in结构体的定义拷过来
  1. struct sockaddr_in{
  2. unsigned short sin_family;
  3. unsigned short int sin_port;
  4. struct in_addr sin_addr;
  5. unsigned char sin_zero[8];
  6. }
复制代码

却出现15: redefinition of `struct sockaddr_in'
的错误。

请教下面三个问题:
1.client变量用struct sockaddr_in来定义有问题吗?
2.connectfd只不过是个socket description,只不过是个int型的数,这样也错?
3.for循环问题已经解决,居然是把i的定义放到外一层就OK

论坛徽章:
0
16 [报告]
发表于 2004-01-04 17:02 |只看该作者

网络编程中的一个错误,搞不定,求助大家

却出现15: redefinition of `struct sockaddr_in'
重复定义了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2004-01-04 17:10 |只看该作者

网络编程中的一个错误,搞不定,求助大家

[quote]原帖由 "yufeng8552"][/quote 发表:

你有没有搞错呀,把我告诉你的那一行
void process_cli(int connectfd, sockaddr_in client); 改成
void process_cli(int connectfd, struct sockaddr_in client);
就行了,把所有出现这种情况的都这样改过来。
真不知道你是网络编程不懂还是c语言不懂。
你根本就没明白到底哪里出错了,
是什么错误。

论坛徽章:
0
18 [报告]
发表于 2004-01-04 20:26 |只看该作者

网络编程中的一个错误,搞不定,求助大家

谢谢lenovo的热情解答,下午我已经把这个问题搞定了,看来网络编程我还是没有理解,先温习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP