Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-仍在获取本地ip而不是客户端_C++_Sockets_Ip_Client_Local - Fatal编程技术网

C++ C++;-仍在获取本地ip而不是客户端

C++ C++;-仍在获取本地ip而不是客户端,c++,sockets,ip,client,local,C++,Sockets,Ip,Client,Local,我在使用套接字获取客户端ip地址时遇到问题。 我仍然将“127.0.0.1”作为客户端ip。但是为什么呢?问题在哪里 下面是序列化的一个片段(第一步): 下面是听力的一个片段(第二步): 我希望有人能找到导致这个错误的原因。 以后谢谢你 排除显而易见的问题:你没有在同一台机器上运行两个进程?这是一个应用程序,在同一台机器上运行。如果你在同一台机器上运行它们,为什么你希望这台机器有不同的地址?我不理解错了。服务器在机器上运行,并使用PHP脚本。在php脚本中,通过套接字连接发送数据。我试图获取客户

我在使用套接字获取客户端ip地址时遇到问题。 我仍然将“127.0.0.1”作为客户端ip。但是为什么呢?问题在哪里

下面是序列化的一个片段(第一步):

下面是听力的一个片段(第二步):

我希望有人能找到导致这个错误的原因。
以后谢谢你

排除显而易见的问题:你没有在同一台机器上运行两个进程?这是一个应用程序,在同一台机器上运行。如果你在同一台机器上运行它们,为什么你希望这台机器有不同的地址?我不理解错了。服务器在机器上运行,并使用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");