C++ C++;-仍在获取本地ip而不是客户端
我在使用套接字获取客户端ip地址时遇到问题。 我仍然将“127.0.0.1”作为客户端ip。但是为什么呢?问题在哪里 下面是序列化的一个片段(第一步): 下面是听力的一个片段(第二步): 我希望有人能找到导致这个错误的原因。C++ C++;-仍在获取本地ip而不是客户端,c++,sockets,ip,client,local,C++,Sockets,Ip,Client,Local,我在使用套接字获取客户端ip地址时遇到问题。 我仍然将“127.0.0.1”作为客户端ip。但是为什么呢?问题在哪里 下面是序列化的一个片段(第一步): 下面是听力的一个片段(第二步): 我希望有人能找到导致这个错误的原因。 以后谢谢你 排除显而易见的问题:你没有在同一台机器上运行两个进程?这是一个应用程序,在同一台机器上运行。如果你在同一台机器上运行它们,为什么你希望这台机器有不同的地址?我不理解错了。服务器在机器上运行,并使用PHP脚本。在php脚本中,通过套接字连接发送数据。我试图获取客户
以后谢谢你 排除显而易见的问题:你没有在同一台机器上运行两个进程?这是一个应用程序,在同一台机器上运行。如果你在同一台机器上运行它们,为什么你希望这台机器有不同的地址?我不理解错了。服务器在机器上运行,并使用PHP脚本。在php脚本中,通过套接字连接发送数据。我试图获取客户端的ip地址,该地址触发web上的按钮将数据发送到服务器
int Serializement::serialize(std::string srvip, unsigned short portno)
{
wsaError = WSAStartup(wVersionRequested, &wsaData);
if (wsaError != 0)
{
printf("Server: The Winsock dynamic link library (dll) was not found!\n");
retval = 100;
return 100;
}
else
if (ConfigLoaderH::ConfigLoader::ServerDisplayMessages() != 0)
{
printf("Server: The Windsock dll was found!\n");
printf("Server: The status: %s.\n", wsaData.szSystemStatus);
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
printf("Server: The dll does not support the Winsock version %u.%u!\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
WSACleanup();
retval = 101;
return 101;
}
else
if (ConfigLoaderH::ConfigLoader::ServerDisplayMessages() != 0)
{
printf("Server: The dll supports the Winsock version %u.%u!\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
printf("Server: The hightest version this dll can support: %u.%u!\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
}
m_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_Socket == INVALID_SOCKET)
{
printf("Server: Error at socket(): %ld.\n", WSAGetLastError());
WSACleanup();
retval = 102;
return 102;
}
else
if (ConfigLoaderH::ConfigLoader::ServerDisplayMessages() != 0)
printf("Server: socket() is OK!\n");
service.sin_family = AF_INET;
service.sin_addr.S_un.S_addr = inet_addr(srvip.c_str());
service.sin_port = htons(portno);
int yes = 1;
if (setsockopt(m_Socket, SOL_SOCKET, SO_REUSEADDR, (char *)&yes, sizeof(yes)) != SOCKET_ERROR)
{
if (ConfigLoaderH::ConfigLoader::ServerDisplayMessages() != 0)
printf("Server: Reuse Address was successful.\n");
}
else
{
printf("Server: Reusing address failed...\n");
retval = 103;
return 103;
}
if (bind(m_Socket, (sockaddr *)&service, sizeof(service)) == SOCKET_ERROR)
{
printf("Server: bind() failed, %ld.\n", WSAGetLastError());
closesocket(m_Socket);
retval = 104;
return 104;
}
else
if (ConfigLoaderH::ConfigLoader::ServerDisplayMessages() != 0)
printf("Server: bind() is OK!\n");
if (listen(m_Socket, 10) == SOCKET_ERROR)
{
printf("Server: listen(): Error listening on socket %ld.\n", WSAGetLastError());
retval = 105;
return 105;
}
else
printf("***Hint: Server is ready... Application form can now be run...***\n");
retval = 106;
return 106; }
...sockaddr_in client_info;...
... try
{
printf("Server: Waiting for a client to connect...\n");
client_info = { 0 };
socklen_t c_len = sizeof(client_info);
AcceptSocket = accept(m_Socket, (sockaddr *)&client_info, &c_len);
if (AcceptSocket == INVALID_SOCKET)
printf("Server: accept() failed.\n");
else
{
char * connected_ip = inet_ntoa(client_info.sin_addr);
printf("Connected client-ip: %s\n", connected_ip);
}
printf("Server: Getting client-info is done!\n");