c++ Socket 通过域名进行网络连接

网络连接测试与域名解析
void  ConnectTest()
{
	//初始化socket
	WORD ver = MAKEWORD(2, 2);
	WSADATA dat;
	WSAStartup(ver, &dat);
	
	//域名列表
	char  hostList[2][20] = {"www.baidu.com","www.qq.com"};
	
	//获取域名对应的ip
	struct hostent *hptr=NULL;
	for (int i = 0; i < 2; ++i)
	{
		//解析成功
		if ((hptr = gethostbyname(hostList[i])) != NULL) break;
	}

	//无效指针则结束
	if (hptr == NULL || hptr->h_addr == NULL) 
	{
		WSACleanup();
		return ;
	}
	
	//设置连接参数
	SOCKADDR_IN _sin = {};
	_sin.sin_family = AF_INET;
	_sin.sin_port = htons(7000);
	
	//如果直接ip赋值,例如www.baidu.com的ip为14.215.177.39就是
	//_sin.sin_addr.S_un.S_addr = inet_addr("14.215.177.39");
	
	//根据域名获取的ip结果在hptr->h_addr_list[],可能含有多个结果,可以遍历或取第一个值
	
	//两种根据域名解析结果的赋值方法
	//1.Copymemory
	CopyMemory(&_sin.sin_addr.S_un.S_addr, hptr->h_addr_list[0], hptr->h_length);
	
	//2.inet_addr和inet_ntoa转换
	_sin.sin_addr.S_un.S_addr= inet_addr(inet_ntoa(*(struct in_addr*)hptr->h_addr_list[0]));

	//建立连接
	SOCKET ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (SOCKET_ERROR == connect(ClientSocket, (sockaddr *)&_sin, sizeof(_sin)))
	{
		closesocket(ClientSocket);
		WSACleanup();
		return false;
	}

	//开始收发
	//send(ClientSocket,data,sizeof(data),0);
	//recv
	closesocket(ClientSocket);
	WSACleanup();
	return ;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值