LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2382|回复: 15

linux下socket编程中客户端收不到信息

[复制链接]
发表于 2006-3-13 11:07:27 | 显示全部楼层 |阅读模式
有两台机器,一台Redhat9,一台FC2,编了两个非常简单的程序,一个是时间服务器,一个是客户端,附件中有两个程序,在Redhat9上运行时间服务器程序,RH9的IP地址为211.84.93.251,hostname为fcy,FC2的IP地址为211.84.93.253,hostname为FC2,其上运行客户端,在服务器上运行./timeserv,在客户端上运行./timeclnt 211.84.93.251 13000,13000是服务器开放的listen端口,两个程序都是从Unix/Linux高级编程实践教程那本书上原封不动的抄下来的啊,在两台机器上运行,在FC2的终端上出现connect: Connection refused这样的提示,如果我在终端上输入./timeclnt fcy 13000,会出现fcy: Success的提示,但是没有输出结果,现在我很着急,恳请各位高手讲解一下吧,小弟这里先谢谢大家了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2006-3-13 11:12:59 | 显示全部楼层
是不是防火墙的问题?还是其他的原因?
回复 支持 反对

使用道具 举报

发表于 2006-3-13 14:27:56 | 显示全部楼层
我这没条件,程序没法运行,提点建议
你可以运行server后,用telnet连接server,看是否能得到结果.
另外,在连接后,用netstat看端口状态,13000端口在server端必须是Listened才行.
在客户端用netstat -na | grep timeclnt 也可以看到client是否连接上.

稍微看了一下代码,有点奇怪,为什么要用标准io来做.另外,你说的输出fcy:Success是哪里输出的?代码中似乎没找到这样的信息.
回复 支持 反对

使用道具 举报

发表于 2006-3-13 20:30:20 | 显示全部楼层
问题应该出在server的bind上, 你只bind了第一个地址, 可能是127。0。0。1吧,所以只在本机可以连接吧。 把这一句:
bcopy( (void *)hp->h_addr, (void *)&saddr.sin_addr, hp->h_length);
改为:
saddr.sin_addr.s_addr =INADDR_ANY;
应该就好了。

*所以在一开始也没有必要gethostname, gethostbyname了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-13 22:41:43 | 显示全部楼层
楼上的兄弟,我按照您的想法改了程序,可是还是以前一样的结果
[root@fcy jining]# ./timeclnt 211.84.93.251 13000
connect: No route to host
[root@fcy jining]# ./timeclnt fcy 13000
fcy: Success
用telnet连接server
[root@fcy jining]# telnet 211.84.93.251 13000
Trying 211.84.93.251...
telnet: connect to address 211.84.93.251: No route to host

netstat -na | grep timeclnt没有反应,直接退出
不知道怎么回事?
回复 支持 反对

使用道具 举报

发表于 2006-3-14 09:12:58 | 显示全部楼层
网络配置有问题. 首先能Ping到那台server么?

1)先在一台机器上测试一下的Server和client
2)把两台机器网络配好了. 再分布测试.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 11:28:50 | 显示全部楼层
可以ping到那台机器,是不是防火墙的问题,我在一台机器上同时运行客户端和服务器端,打开两个终端进行测试,能够收到数据
[root@FC2 bookcode]# ./timeserv
Wow! got a call!

[root@FC2 bookcode]# ./timeclnt FC2 13000
The time here is ..Tue Mar 14 09:13:27 2006
但是在两台机器上就不行,不知道为什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 12:01:34 | 显示全部楼层
还有一个问题,我在同一台机器上运行客户端和服务器端,telnet一下
[root@FC2 bookcode]# telnet 211.84.93.253 13000
Trying 211.84.93.253...
telnet: connect to address 211.84.93.253: Connection refused
[root@FC2 bookcode]# telnet FC2 13000
Trying 127.0.0.1...
Connected to FC2.
Escape character is '^]'.
The time here is ..Tue Mar 14 11:55:11 2006
不知道为什么telnet ip不行,而telnet hostname可以,不知道为什么?
上述情况也是这样,运行客户端 IP 端口也不行
[root@FC2 bookcode]# ./timeserv
[root@FC2 bookcode]# ./timeclnt 211.84.93.253 13000
connect: Connection refused
回复 支持 反对

使用道具 举报

发表于 2006-3-14 12:35:39 | 显示全部楼层
./timeclnt 127.0.0.1 13000
./timeclnt localhost 13000

呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-14 17:23:06 | 显示全部楼层
./timeclnt 127.0.0.1 13000
./timeclnt localhost 13000
都可以,但是究竟为什么放在两台机器上就不行了那?还有人说可能是我的ip是外网ip,用211.84.93.253跟主机名不匹配,但是在学校的校园网就是这么指定ip的,是不是在那种192.168.123那种ip就可以了?可是我又没有实验环境,真不知道该怎么办
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表