- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获取连接到我的服务器套接字的套接字的 IP 地址。我已经包含了我的代码。
sa_data 不返回类型为“xxx.xxx.xxx.xxx”的 char[14]。相反,它返回 [11][1][xxx][xxx][xxx][xxx][][][][][][][]...[]
。谁能帮忙?
int InitialResult;
char SendMessage[1024];
char ReceiveMessage[1024];
WSADATA WSAData;
addrinfo Hints;
addrinfo *Result;
SOCKET ListenSocket;
SOCKET ClientSocket;
ZeroMemory(&Hints, sizeof(Hints));
Hints.ai_family = AF_INET;
Hints.ai_socktype = SOCK_STREAM;
Hints.ai_protocol = IPPROTO_TCP;
Hints.ai_flags = AI_PASSIVE;
while(1)
{
InitialResult = WSAStartup(MAKEWORD(2,2), &WSAData);
if (InitialResult != 0)
{
cout << "WSA start up failed.";
}
InitialResult = getaddrinfo(NULL, portnumber, &Hints, &Result);
if (InitialResult != 0)
{
cout << "Get address information failed.";
WSACleanup();
}
ListenSocket = socket(Result->ai_family, Result->ai_socktype, Result->ai_protocol);
if (ListenSocket == INVALID_SOCKET)
{
cout << "Socket initialization failed.";
WSACleanup();
}
InitialResult = bind(ListenSocket, Result->ai_addr, (int)Result->ai_addrlen);
if (InitialResult == SOCKET_ERROR)
{
cout << "Bind failed." << portnumber;
closesocket(ListenSocket);
ListenSocket = INVALID_SOCKET;
WSACleanup();
}
InitialResult = listen(ListenSocket, SOMAXCONN);
if (InitialResult == SOCKET_ERROR)
{
cout << "Listen failed." << portnumber;
closesocket(ListenSocket);
ListenSocket = INVALID_SOCKET;
WSACleanup();
}
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET)
{
cout << "Socket accept failed." << portnumber;
WSACleanup();
}
sockaddr test;
int a = sizeof(test);
cout << "getpeername() return value : " << getpeername(ClientSocket, &test, &a) << endl;
cout << "test.sa_data : " << test.sa_data;
StartReceive(ReceiveMessage, ClientSocket);
strcpy(SendMessage,"Congratulations!! You have successfully transfered some data to G DA.");
StartSend(SendMessage, ClientSocket);
StartSend(portnumber, ClientSocket);
InitialResult = shutdown(ClientSocket, SD_SEND);
if (InitialResult == SOCKET_ERROR)
{
cout << "Shut down failed." << portnumber;
closesocket(ClientSocket);
WSACleanup();
}
closesocket(ClientSocket);
closesocket(ListenSocket);
WSACleanup();
}
最佳答案
accept(2)
的第二个和第三个参数让您无需额外调用 getpeername(2)
即可获得该信息.然后你需要将 binary address 转换为 string representation 像 inet_ntoa(3)
.
关于c++ - getpeername sa_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402457/
我正在用 C 语言研究一个简单的 TCP 服务器,并遇到以下问题。我的代码如下所示: struct sockaddr_in servaddr; socklen_t address_len; int c
我有以下代码,我试图用它来获取套接字另一端的地址,但是 getpeername() 总是失败,并出现错误的文件描述符 错误。我做错了什么? #include #include #include #i
我想获取连接到我的服务器套接字的套接字的 IP 地址。我已经包含了我的代码。 sa_data 不返回类型为“xxx.xxx.xxx.xxx”的 char[14]。相反,它返回 [11][1][xxx]
编辑:重申问题,如果我正在监听端口 54321 并且监听端口 12345 的本地进程连接到我,创建套接字 s,我如何真正找到它正在监听的端口? sockaddr_in addr; int len =
我做了一个简单的套接字程序(服务器/客户端)。服务器在 windows 上运行,客户端是 android 应用程序,其中包含由 c 套接字组成的共享库。 在客户端,为了避免卡住,我将套接字更改为 NO
我正在 Linux 上编写我的第一个套接字程序,并试图打印我连接到的对等点的 IP 地址和端口。我使用 getpeername() 以及 inet_ntop() 和 ntohs() 从 sockadd
我在本地机器上运行我的应用程序服务器,在虚拟机 (Windows Server 2012) 上运行应用程序客户端。 我正在使用 NAT 网络设置。 当我从服务器调用 getpeername() 时,我
在服务器中,我知道可以获取本地计算机(AKA对等方)的地址信息 通过使用accept方法,但是我看到有些人在接受连接后正在使用getpeername()作为该地址。 结果有什么不同吗? 我看到了以下l
我用这一行得到了一个旧代码: getpeername(0, (struct sockaddr *)&sin, &namelen) getpeername(0,...) 有什么作用?它适用于所有操作系统
在我的 Linux C++ 应用程序中,我使用 getpeername 来获取对等 IP。我的问题是:当我在我的机器上启用 IPv6 时,我从对等方获得的 IP 属于 IF_INET6 系列,尽管它是
在带有套接字程序的C中,我尝试在服务器套接字中插入getpeername()和getsockname,以在服务器端打印服务器套接字和客户端套接字的IP地址。注意:我的服务器套接字使用 INADDR_A
每当我使用函数 getpeername() 时,我的程序都会崩溃并在调试时返回 255。它是 printf 的主机名,当它开始尝试 printf peername 时,它显示“Peer Name:
在我的 Linux C++ 应用程序中,我使用了 getpeername 和 getsockname。当操作系统启用 IPv6 时,getpeername 和 getsockname 都只返回端口!
getpeername() 会返回远程 UDP 对端的 IP 地址信息吗?我怀疑它无法正常工作,因为它需要连接。 请确认是否可以使用getpeername()获取远程UDP对端地址。 最佳答案 如果
我想问一下 getpeername() 函数,因为它返回数据,如标题所述。我试图直接从 accept() 函数中获取值,结果也一样。端口的值似乎随机出现,即使地址的值是正确的(地址是 127.0.0.
我有一个用 C 编写的服务器 (A) 和一个客户端 (B),运行在同一台 Linux 计算机上。服务器将一个端口绑定(bind)到 INADDR_ANY,客户端将另一个端口绑定(bind)到 INAD
我正在尝试获取连接到服务器套接字的客户端的 IP 和端口。我传递了以下函数客户端套接字文件描述符,但它返回 0.0.0.0:0这让我发疯,但有时它会返回类似 248.127.0.0:24870 的内容
这个问题只是为了兴趣:为什么 getpeername- function Winsock 接收 namelen 参数作为指针?在我看来,这是一个主要的设计缺陷。 例子: sockaddr_in add
在我的程序中,我在 libevent 事件循环中为 connfd 注册了一个 EV_READ 事件。触发此事件时,我使用 getpeername 获取对等方的 IP/PORT 地址 socklen_t
进程之间,有一个通过msg共享的socket。通过socket,尝试获取远程连接信息。但 getpeername 结果是 0.0.0.0 没有任何错误。 即使我检查了/proc/net/tcp 也没有
我是一名优秀的程序员,十分优秀!