C++ SDL_Net忽略传递的端口值,并在随机空闲端口上启动服务器

C++ SDL_Net忽略传递的端口值,并在随机空闲端口上启动服务器,c++,sdl,sdl-net,C++,Sdl,Sdl Net,我正在尝试在SDL&SDL_网上写一个类似于小代理的东西 我的程序成功创建了一个服务器并等待传入连接。 但由于某些原因,它忽略了输入的端口并始终使用24862。如果我启动另一个实例,它会选择另一个随机空闲端口 这是我的代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <csignal> #include <string> #include "SDL

我正在尝试在SDL&SDL_网上写一个类似于小代理的东西

我的程序成功创建了一个服务器并等待传入连接。 但由于某些原因,它忽略了输入的端口并始终使用24862。如果我启动另一个实例,它会选择另一个随机空闲端口

这是我的代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <csignal>
#include <string>
#include "SDL2/SDL.h"
#include "SDL2/SDL_net.h"

void Error(const char *txt)
{
    std::cout << txt;

    static volatile int v = 0;
    while (1)
        v++;
}

int main(int, char **)
{
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS | SDL_INIT_NOPARACHUTE))
        Error("SDL init failed!");
    if (SDLNet_Init())
        Error("SDL net plugin init failed!");
    TCPsocket srv1, srv2, con;
    IPaddress con_ip, host_ip;
    {
        {
            auto handler = [](int){std::exit(0);};
            std::signal(SIGFPE, handler);
            std::signal(SIGILL, handler);
            std::signal(SIGINT, handler);
            std::signal(SIGBREAK, handler);
            std::signal(SIGSEGV, handler);
            std::signal(SIGTERM, handler);
            std::signal(SIGABRT, handler);
        }

        std::cout << "  < Wellcome to Retranslator! >\n\nWhat is your hosting port?\n>: ";
        int hport = 0, cport = 0;
        char c;

        while (c = std::getchar(), c != '\n')
            hport = hport * 10 + (c - '0');
        std::cout << "[" << hport << "]\n";

        std::cout << "What ip you want to connect to?\n>: ";
        std::string ips;
        while (c = std::getchar(), c != '\n')
            ips += c;
        std::cout << "[" << ips << "]\n";

        std::cout << "What port you want to connect to?\n>: ";
        while (c = std::getchar(), c != '\n')
            cport = cport * 10 + (c - '0');
        std::cout << "[" << cport << "]\n";

        host_ip.host = INADDR_ANY;
        host_ip.port = hport;

        SDLNet_ResolveHost(&con_ip, ips.c_str(), cport);

        if (con_ip.host == INADDR_NONE)
            Error("IP parsing failed!");

        srv1 = SDLNet_TCP_Open(&host_ip);
        if (srv1 == 0)
            Error("Server creation failed!");

        std::cout << "Server created on port " << hport << "!\nWaiting for incoming connection...\n";

        while (1)
        {
            srv2 = SDLNet_TCP_Accept(srv1);
            if (srv2)
                break;
        }
        std::cout << "Remote client joined!\n";
        con = SDLNet_TCP_Open(&con_ip);
        if (con == 0)
            Error("Can't connect to application!");
        std::cout << "Successfully connected to application!\n";
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括“SDL2/SDL.h”
#包括“SDL2/SDL_net.h”
无效错误(常量字符*txt)
{

std::cout我找出了问题所在

这很奇怪,但看起来端口(uint16_t)需要以相反的字节顺序表示。 因此,7777变成了24862

(另外,我关于程序选择随机自由端口的假设是错误的,因为我第一次使用7777,第二次使用7779。)