LinuxSir.cn,穿越时空的Linuxsir!

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

gethostbyname 的用处??

[复制链接]
发表于 2006-2-20 11:24:41 | 显示全部楼层 |阅读模式
做为服务端
struct hostent *server;
server = gethostbyname ("127.0.0.1");
memcpy ((char *) &serv_addr.sin_addr.s_addr, (char *) server->h_addr,
          server->h_length);
是指定了只接受特定IP的连接


staddr->sin_addr.s_addr=htonl(INADDR_ANY);
只要是连到确定端口的ip都接受

是这个意思吧???????????
现在才明白 gethostbyname 的用处
发表于 2006-2-20 12:34:59 | 显示全部楼层
gethostbyname是名字解析,跟你后面说的指定IP、端口没啥关系
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 14:05:54 | 显示全部楼层
就是想问
要是服务端的socket绑定的地址如果这样定义过
struct hostent *server;
server = gethostbyname ("10.87.16.201");
memcpy ((char *) &serv_addr.sin_addr.s_addr, (char *) server->h_addr,
server->h_length);

如果IP为10.87.16.202的机器连过来
会被接受吗
回复 支持 反对

使用道具 举报

发表于 2006-2-20 14:39:13 | 显示全部楼层
从代码里看不到你拿这个serv_addr干嘛用

我认为你只能指定服务端口绑定在哪个ip、哪个端口,不能决定是否接受连接
而客户端能否连接,取决于他能否到达你这个主机地址和端口,也就是和中间的路由以及防火墙配置有关

要做到这个,你可以用iptables来辅助实现
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 15:01:14 | 显示全部楼层
找到资料了
/*******/
使用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获取一个没有被占用的端口号:
  my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */
  my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */
通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。
同样,通过将my_addr.sin_addr.s_addr置为INADDR_ANY,系统会自动填入本机IP地址。
/*******/
原来放入的是本机的IP
而不是客户端的IP
谢谢了
回复 支持 反对

使用道具 举报

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

本版积分规则

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