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 ;
}
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中使用Socket进行连接的代码可以通过以下步骤实现: 1. 创建Socket:使用`socket()`函数创建一个套接字,指定协议族、套接字类型和协议。 2. 绑定地址:使用`bind()`函数将套接字与本地地址绑定,指定IP地址和端口号。 3. 监听连接:使用`listen()`函数开始监听连接请求。 4. 接受连接:使用`accept()`函数接受客户端的连接请求,返回一个新的套接字用于与客户端通信。 5. 通信:使用新的套接字进行数据的发送和接收,可以使用`send()`和`recv()`函数进行数据的传输。 6. 关闭连接:使用`close()`函数关闭套接字。 下面是一个简单的C++ Socket连接的示例代码: ```cpp #include <iostream> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> int main() { // 创建Socket int serverSocket = socket(AF_INET, SOCK_STREAM, 0); // 绑定地址 struct sockaddr_in serverAddress{}; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(8080); serverAddress.sin_addr.s_addr = INADDR_ANY; bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)); // 监听连接 listen(serverSocket, 5); while (true) { // 接受连接 struct sockaddr_in clientAddress{}; socklen_t clientAddressLength = sizeof(clientAddress); int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddress, &clientAddressLength); // 通信 char buffer[1024]; while (true) { memset(buffer, 0, sizeof(buffer)); int bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0); if (bytesRead <= 0) { break; } std::cout << "Received: " << buffer << std::endl; // 发送响应 const char* response = "Hello, client!"; send(clientSocket, response, strlen(response), 0); } // 关闭连接 close(clientSocket); } // 关闭Socket close(serverSocket); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值