Amb*_*ber 1 c++ sockets windows
在我的C:\ Windows\System32\drivers\etc\service文件中,我看到了
echo 7/tcp echo 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;
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,下面是显示的结果:
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
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么s_port是1792而不是7?我在文件服务中找不到1792.有人可以解释一下吗?非常感谢.
小智 6
7*256 = 1792
它是网络字节顺序.尝试打印ntohs(serverInfo-> s_port).
如果你打算使用它来构建一个,sockaddr_in你可以直接将它复制到sin_port那个网络字节顺序.
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |