unsigned int dir(char * server) {
int sck;//套接字变量
struct sockaddr_in serv_adr; //远程主机的地址
struct hostent *host; //指向远程主机的指针
unsigned char databuf[FILEBUF_SIZE]; //数据
int bytes = 0, bytesread = 0; //字节数,读取到的字节数
host = gethostbyname(server); //根据远程主机的主机名,得到指向远程主机的指针
if (host == (struct hostent *) NULL) { //如果得到指向远程主机的指针失败,报告错误,并返回
perror("gethostbyname failed");
return 0;
}memset(&serv_adr, 0, sizeof(serv_adr)); //初始化远程主机的地址,结构体内所有成员清零
serv_adr.sin_family = AF_INET; //设置地址类型
memcpy(&serv_adr.sin_addr, host->h_addr, host->h_length);//取出指向远程主机的指针中包含的地址信息,赋给远程主机地址变量
serv_adr.sin_port = htons(SERVICE_PORT);//设置端口号,比如http服务对应80端口,ftp对应21端口
if ((sck = socket(AF_INET, SOCK_STREAM, 0)) < 0) { //如果建立TCP协议的套接字失败,报告错误,并返回
perror("error on socket()");
return 0;
}
if (connect(sck, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) < 0) {//如果使用该套接字连接到远程主机失败,报告错误,并返回
perror("error on connect()");
return 0;
}write(sck, "DI\n\n", 4); //连接成功,发送内容为"DI\n\n"的消息,远程主机收到该消息,解析后生成目录列表,并将目录列表信息传递回来
printf("Remote directory listing:\n");//输出提示信息“远程主机正在生成目录列表”
while ((bytes = read(sck, databuf, FILEBUF_SIZE)) > 0) { //从套接字的数据流中读取远程主机的返回信息(即目录列表),每次读取FILEBUF_SIZE个字节,直到全部读取完毕
write(fileno(stdout), databuf, bytes);//将每次读到的数据,输出到标准输出流(stdout),即屏幕上
bytesread += bytes;//接收到的字节数累加
}
close(sck); /* Close the socket */ //通信完成,关闭套接字,关闭连接
return bytesread; //返回读取到的字节数(即远程主机返回的信息的大小)
}
分享到:
相关推荐
// 获得主机ip地址 struct hostent * phost; phost = gethostbyname(szhostname);//根据主机名获得IP地址 m_strName=szhostname; int h_length=4; for( int j = 0; j { CString addr; if( j > 0 ...
此程序先用gethostname得到主机名,再gethostbyname根据主机名得到主机信息,显示相关的主机所有信息。同时,程序还测试getprotobyname和getprotobynumber这两个函数,用两种不同的方法得到相关协议的信息。这是我写...
### 使用GetHostByName获取IP地址 #### 一、概述 在C++Builder环境中进行网络编程时,经常需要通过域名来获取对应的IP地址。这通常涉及到Winsock库的应用,特别是`GetHostByName`函数的使用。本文将详细介绍如何...
Messagebox("主机信息", "主机名: " + hostName + "\nIP地址: " + ipAddress) Else Messagebox("错误", "无法连接到本地回环地址") End If // 关闭Socket连接 socketObj.Close Destroy socketObj ``` 请注意,...
在IT领域,获取主机信息是常见的任务,这包括主机名、IP地址以及系统时间等基本数据。这些信息在网络管理、日志记录、系统监控等多个场景中都有着重要的作用。本篇将详细介绍如何通过源代码来获取这些关键信息,并...
本文实例讲述了Python3获取电脑IP、主机名、Mac地址的方法。分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 ''' Created on 2019年4月11日 @author: Administrator ''' import socket import...
在这个主题中,“MFC获取主机名,IP地址,MAC地址”指的是如何在MFC应用中获取计算机的相关网络信息。 首先,获取主机名是通过Windows API函数`GetComputerName`来完成的。这个函数允许程序获取当前系统的计算机名...
- `gethostbyname`: 这是一个较老的函数,根据主机名获取主机信息结构,其中包含IP地址。 ```cpp hostent* host = gethostbyname("hostname"); if (host != NULL) { // 使用host->h_addr_list获取IP地址 } ...
- `GetAdaptersInfo()` 或 `GetHostByName()`:这两个函数可用于获取IP地址信息,它们通常通过.NET Framework中的类库(如System.Net.NetworkInformation命名空间)实现。 压缩包中的文件`test.pbl`、`test.pbt`和`...
当`gethostbyname`找不到本地缓存的主机信息时,可能会尝试查询NIS服务器,特别是那些在小型网络或者没有DNS服务器的情况下。NIS通过RPC(Remote Procedure Call)协议工作,使得客户端可以透明地在远程服务器上执行...
`gethostbyname`函数是C语言中用于获取主机名对应的IP地址的一个函数,它在处理DNS查询时非常实用。本文将详细介绍`gethostbyname`的用法及其在域名解析过程中的作用。 首先,让我们理解`gethostbyname`的基本概念...
这段Python代码通过`socket.getaddrinfo`获取所有地址信息,然后通过`socket.gethostbyname`将域名转换为IP地址。 至于提供的压缩包文件"Gethostbyname",可能包含了一个示例程序或者库,用于演示如何使用`...
- 编程方式:在Python中,可以使用`socket.gethostbyname(socket.gethostname())`获取本机IP,使用`socket`库的`connect()`方法连接远程服务器并获取其IP。在Java中,可以使用`InetAddress.getLocalHost()....
在提供的压缩包“实例84 获得主机名和IP地址”中,应该包含了上述示例的源代码,可以直接编译运行,以验证和学习如何在VC++中实现这一功能。通过阅读和理解这些源代码,你可以更好地掌握如何在实际开发中运用这些API...
对于IP地址,如果需要获取本地主机的所有网络接口的IP,可以使用`socket.gethostbyname_ex()`: ```python import socket hostname, aliases, ips = socket.gethostbyname_ex(socket.gethostname()) print("IP地址...
- `Dns.GetHostByName()`:根据主机名获取IPHostEntry对象,其中包含IP地址等信息。 - `IPHostEntry.AddressList`:返回一个列表,其中包含所有与该主机名关联的IP地址。 ### 二、获取本地主机MAC地址 #### 1. ...
在IT行业中,自动获取主机名和IP地址是网络编程中常见的需求,特别是在开发涉及网络通信的应用时。在Windows环境下,可以使用Visual C++ 6.0这样的开发工具来实现这一功能。下面将详细介绍如何利用VC++ 6.0进行...
3. **获取主机信息**:要获取主机的IP地址,可以使用`gethostname`函数来获取主机名,然后通过`gethostbyname`或`gethostbyaddr`函数将主机名转换为相应的IP地址结构体(`struct hostent`)。不过,这些函数在较新的...
3. **获取本地主机信息**:要获取主机名,可以使用`gethostname`函数。它接受一个缓冲区和其大小作为参数,然后将主机名复制到缓冲区中。为了获取IP地址,可以使用`gethostbyname`或`getaddrinfo`函数。`...
std::cout 获取主机信息失败" ; } else { for (int i = 0; hostInfo->h_addr_list[i] != NULL; ++i) { in_addr addr; memcpy(&addr, hostInfo->h_addr_list[i], sizeof(in_addr)); std::cout 地址: " (addr) ;...