繁体   English   中英

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

[英]why doesn't getservbyname return the correct port number?

在我的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因为这也是网络字节顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM