在最后一个 recvfrom() 中获取 IP 和端口作为 const char*

Get IP and Port as const char* in last recvfrom()

如何获取最后收到的数据包 IP 地址和端口并将其存储为 const char*

const char* strIP = inet_ntoa(((struct sockaddr_in*)&RecvAddr)->sin_addr);
const char* strPort = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port)).c_str();
printf("%s | %s\n", strIP, strPort);

当前使用的代码将打印 IP,但是我们的端口将是空白的,所以我认为将 USHORT sin_port 转换为 const char* strPort 是一个问题。

const char* strPort = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port)).c_str();

创建一个临时 string,获取 string 的内部缓冲区的地址,然后销毁 string 因为 string 没有分配给任何东西.这意味着 c_str 返回并由 strPort 引用的指针是无效的,使用它会导致未定义的行为。

最好只保留 string,直到您不再需要它为止。

std::string whatever = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port));
const char* strPort = whatever.c_str();

std::string strPort = std::to_string(ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port));
printf("%s | %s\n", strIP, strPort.c_str());

你不需要它:

short port = ntohs(((struct sockaddr_in*)&RecvAddr)->sin_port);
printf("%s | %d\n", strIP, port);