通过一个tcp连接获取客户端ip和端口

在多路实况下出现某几路视频卡顿时,最好的办法是分析流数据,但抓包时同时可能抓了多路视频流,一般会先分析日志,确定哪几路流存在问题,然后通过日志里的客户端ip和端口号去找到要分析的那路流,一般情况流媒体服务器的端口是554,地址也知道,比较好寻找,而客户端的地址信息就需要通过getsockname去获取,具体代码如下:

struct sockaddr stAddr = {0};
struct sockaddr_in stAddrIn = {0};
long lNameLen = sizeof(struct sockaddr);
if(0 == getsockname(SockFd, &stAddr, (socklen_t *)&lNameLen))
{
	memcpy(&stAddrIn, &stAddr, lNameLen);
	printf("CurSocket[%d], ClientAddr[%s:%d].\n", SockFd, inet_ntoa(stAddrIn.sin_addr), ntohs(stAddrIn.sin_port));
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在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、付费专栏及课程。

余额充值