c++域名怎么获取ip和端口号源程序
利用C++的Socket可以获得ip和端口号。
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
在socket编程中,服务器端accept()等待一个客户端的连接,当连接成功后,accept拷贝客户端的地址信息到sin_addr里面,我们如何从sin_addr取得此客户端的Ip地址和端口号呢?当sockaddr_in.sin_family = AF_INET时,sockaddr = sockaddr_in。
据此,我们可以做一下转换,就可以利用 inet_ntoa() 来得到ip地址和端口号了:int new_fd = accept(sock, &clientAddr, &sin_size);
if(new_fd<0)
{
char msg[64];
bzero(msg,sizeof(msg));
sprintf(msg,"accept failed");
log::outputSysErr(msg);
}
else
{
// 将sockaddr强制转换为 sockaddr_in
sockaddr_in sin;
memncpy(&sin, &clientAddr, sizoef(sin));
// 取得ip和端口号
sprintf(info.ip, inet_ntoa(sin.sin_addr));
info.port = sin.sin_port;
info.sock = new_fd;
}
2024-10-28 广告
//根据域名获取IP可行,代码如下:
//author:Wang Hongqi
//email:573827574@qq.com
//date:2014/mar/1
///////////////////////////////////////////////////////////
#include<stdafx.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include<string.h>
#include <sys/types.h>
#include <winsock2.h>
#include "iostream"
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);
hostent *phost=gethostbyname("www.hao123.com");
in_addr addr;
for(int i=0;;i++)
{
char *p=phost->h_addr_list[i];
if(p==NULL)
break;
memcpy(&addr.S_un.S_addr,p,phost->h_length);
char* ip=inet_ntoa(addr);
printf("IP地址为:%s",ip);
}
system("pause");
}
端口号怎么取得(有不固定,即使是WEBSERVER服务器端口号也不一定是80),呵呵!!!