GetPeerName获取连入的客户端IP 端口

本文介绍了CAsyncSocket::GetPeerName()函数在获取连入客户端IP和端口时的使用方法,包括两个重载函数的用法,强调了lpSockAddrLen参数的重要性,指出其必须作为输入输出参数正确设置。同时提醒开发者注意端口的网络序到本机序的转换,以及在使用指针时的内存管理,特别是在客户端连接本机时可能返回的情况。
摘要由CSDN通过智能技术生成

CAsyncSocket::GetPeerName()有两个重载:

BOOL GetPeerName( CString& rPeerAddress, UINT& rPeerPort );
BOOL GetPeerName( SOCKADDR* lpSockAddr, int* lpSockAddrLen );

当函数正常执行时,返回非0值;如果返回0,可以通过调用GetLastError() 函数取得错误码;


BOOL GetPeerName( SOCKADDR* lpSockAddr, int* lpSockAddrLen );

	SOCKADDR_IN* lpSockAddrIn = new SOCKADDR_IN;
	int nPeerLen =sizeof(SOCKADDR_IN);//注1
	if(client.GetPeerName((SOCKADDR*)lpSockAddrIn,&nPeerLen)){//client为CSocket类实例
		TRACE("GetPeerName Success:%s:%d",
		inet_ntoa(lpSockAddrIn->sin_addr),ntohs(lpSockAddrIn->sin_port));//注2
	}else{
		TRACE("GetPeerName ErrorCode:%d\n",GetLastError());
	}
	delete lpSockAddrIn;

BOOL GetPeerName( CString& rPeerAddress, UINT& rPeerPort );


                
要在C语言中获取TCP服务器的客户端IP,可以使用以下步骤: 1. 创建一个TCP服务器套接字,并绑定到指定的IP地址和端口。 2. 使用`listen`函数开始监听客户端连接请求。 3. 使用`accept`函数接受客户端连接,并返回一个新的套接字用于与客户端通信。 4. 使用`getpeername`函数获取客户端套接字的地址信息,包括IP地址和端口。 5. 使用`inet_ntoa`函数将IP地址转换为字符串形式。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> int main() { int server_socket, client_socket; struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len = sizeof(client_addr); // 创建TCP服务器套接字 server_socket = socket(AF_INET, SOCK_STREAM, 0); if (server_socket == -1) { perror("socket creation failed"); exit(EXIT_FAILURE); } // 绑定服务器地址和端口 server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(12345); if (bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind failed"); exit(EXIT_FAILURE); } // 开始监听客户端连接请求 if (listen(server_socket, 5) == -1) { perror("listen failed"); exit(EXIT_FAILURE); } printf("Server listening on port 12345...\n"); // 接受客户端连接 client_socket = accept(server_socket, (struct sockaddr *)&client_addr, &client_addr_len); if (client_socket == -1) { perror("accept failed"); exit(EXIT_FAILURE); } // 获取客户端IP地址 char client_ip[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &(client_addr.sin_addr), client_ip, INET_ADDRSTRLEN); printf("Client connected from %s:%d\n", client_ip, ntohs(client_addr.sin_port)); // 关闭套接字 close(client_socket); close(server_socket); return 0; } ``` 这段代码创建了一个TCP服务器,绑定到本地IP地址的12345端口。当客户端连接成功时,会打印客户端IP地址和端口,并关闭连接。你可以根据自己的需要修改代码中的IP地址和端口号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值