C++ WinSock c++;inet#u ntop始终显示204.204.204.204(并且accept()没有';t失败)

C++ WinSock c++;inet#u ntop始终显示204.204.204.204(并且accept()没有';t失败),c++,c,networking,winsock,winsock2,C++,C,Networking,Winsock,Winsock2,我正在尝试制作一个winsock服务器,我想在客户端连接时在服务器上显示客户端的ip,但这就是问题所在。每次尝试连接时,显示204.204.204.204。我试图连接另一台计算机,但结果是一样的。 在此之后,我开始在这个网站上寻找与我有相同问题的人,我发现有几个人与我有相同的问题,但他们都有accept或inet_ntop功能,无法正常工作。所以我检查,这两个函数都没有返回错误。也许我很笨,但我真的不知道问题出在哪里。(顺便说一句,英语不是我的第一语言,请告诉我你是否注意到了,或者我的英语是否

我正在尝试制作一个winsock服务器,我想在客户端连接时在服务器上显示客户端的ip,但这就是问题所在。每次尝试连接时,显示204.204.204.204。我试图连接另一台计算机,但结果是一样的。

在此之后,我开始在这个网站上寻找与我有相同问题的人,我发现有几个人与我有相同的问题,但他们都有accept或inet_ntop功能,无法正常工作。所以我检查,这两个函数都没有返回错误。也许我很笨,但我真的不知道问题出在哪里。(顺便说一句,英语不是我的第一语言,请告诉我你是否注意到了,或者我的英语是否还不错)

代码中不起作用的部分

sockaddr_in from;
    int clientlen = sizeof(from);
    // accept
    SOCKET client = accept(server, (SOCKADDR*)&client, &clientlen);
    if (client == INVALID_SOCKET)
    {
        std::cout << "Error in accept(): " << WSAGetLastError << std::endl;
        WSACleanup();
    }
    else
    {

        char clientIp[17];
        if (inet_ntop(AF_INET, &from.sin_addr, clientIp, 17) == NULL)
        {
            std::cout << "Can't get the client's ip: " << WSAGetLastError() << std::endl;
        }

        std::cout << "ip connected: " << clientIp << std::endl;
sockaddr\u从中输入;
int clientlen=sizeof(from);
//接受
SOCKET client=accept(服务器,(SOCKADDR*)和客户端,&clientlen);
if(客户端==无效的_套接字)
{
std::您是否在
accept()
的第二个参数中传递了错误变量的地址。 您正在传递将要分配
accept()结果的
SOCKET客户端
变量的地址当在同一语句中声明和初始化变量时,C++允许变量的地址。但这不是你想要的,在这里,你需要通过< <代码> SokAddRIn的地址从< /Calp>变量中传递:
sockaddr\u从中输入;
int clientlen=sizeof(from);
//接受

SOCKET client=accept(服务器,(SOCKADDR*)&from,&clientlen);//accept
的第二个参数看起来是错误的。附带问题,你会很高兴知道,你的英语不错。它不完美,但大多数母语人士的英语也不完美,所以…@1201programalm可能是,但函数的返回值不等于NULL,所以应该是好的(我认为).@Chipster哈哈谢谢!像
204.204.204.204
这样的东西下次你看到它时应该会提醒你所有的警铃:204是十六进制的。
0xcc
。看看我的意思。;-)
#include <iostream>
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <string>

#pragma comment(lib, "ws2_32.lib")

int main()
{
    std::cout << "--- Tcp/ip Server ---" << std::endl;
    WSADATA wsa;
    WSAStartup(MAKEWORD(2, 2), &wsa);

    SOCKET server = socket(AF_INET, SOCK_STREAM, 0);
    if (server == INVALID_SOCKET)
    {
        std::cout << "error in SOCKET(): "<< WSAGetLastError() << std::endl;
        WSACleanup();
    }
    sockaddr_in s;
    s.sin_family = AF_INET;
    s.sin_addr.s_addr = INADDR_ANY;
    s.sin_port = htons(52000);

    // bind
    if (bind(server, (sockaddr*)&s, sizeof(s)) == SOCKET_ERROR)
    {
        std::cout << "Error: bind()" << std::endl;
    }
    //listen
    if (listen(server, SOMAXCONN) == SOCKET_ERROR)
    {
        std::cout << "Error in listen(): " << WSAGetLastError() << std::endl;
        WSACleanup();
    }
    sockaddr_in from;
    int clientlen = sizeof(from);
    // accept
    SOCKET client = accept(server, (SOCKADDR*)&client, &clientlen);
    if (client == INVALID_SOCKET)
    {
        std::cout << "Error in accept(): " << WSAGetLastError << std::endl;
        WSACleanup();
    }
    else
    {

        char clientIp[17];
        if (inet_ntop(AF_INET, &from.sin_addr, clientIp, 17) == NULL)
        {
            std::cout << "Can't get the client's ip: " << WSAGetLastError() << std::endl;
        }

        std::cout << "ip connected: " << clientIp << std::endl;

        // the code isn't finished yet

        system("pause");
        WSACleanup();
    }
    return 0;
}