gpt4 book ai didi

c++ - 为什么 getservbyname 不返回正确的端口号?

转载 作者:可可西里 更新时间:2023-11-01 11:07:21 34 4
gpt4 key购买 nike

在我的 C:\Windows\System32\drivers\etc\service 文件中,我看到了

回声 7/TCP回显 7/udp

所以我写了一个程序来测试getservbyname

#include <stdio.h>
#include <winsock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib") // winsock library

using namespace std;

int main(int argc, char *argv[])
{
WSADATA wsa;
SOCKET s;
sockaddr_in server;
servent *serverInfo;


cout << "Initializing Winsock...." << endl;

if (WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
cout << "Failed. Error code: " << WSAGetLastError();
return 1;
}
cout << "initialized." << endl;

serverInfo = getservbyname("echo", "tcp");
cout << "service echo:: s_name is " << serverInfo->s_name << endl;
cout << "service echo:: s_aliases is " << serverInfo->s_aliases << endl;
cout << "service echo:: s_port is " << serverInfo->s_port << endl;
cout << "service echo:: s_proto is " << serverInfo->s_proto << endl;

return 0;
}

当我运行它时,下面是显示的结果:

Initializing Winsock....
initialized.
service echo:: s_name is echo
service echo:: s_aliases is 00724F08
service echo:: s_port is 1792
service echo:: s_proto is tcp

我的问题是为什么 s_port 是 1792 而不是 7?我在文件服务中找不到 1792。有人可以解释一下吗?非常感谢。

最佳答案

7*256=1792

它是网络字节顺序。尝试改为打印 ntohs(serverInfo->s_port)。

如果你打算用它来构建一个 sockaddr_in,你可以直接将它复制到 sin_port,因为那也是网络字节顺序。

关于c++ - 为什么 getservbyname 不返回正确的端口号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944563/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com