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