Почему я не могу установить соединение между Winsock и Socket в кроссплатформенном настройке? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу установить соединение между Winsock и Socket в кроссплатформенном настройке? [закрыто]

Сообщение Anonymous »

Я пишу этот кроссплатформенный класс сокетов, используя Winsock и Socket, где цель состоит в том, чтобы иметь что-то, что может отправить данные в обоих способах. Я использую архитектуру сервера-клиента в C ++ 20, и у меня есть ее работа, как и ожидалось, но только если я размещаю сервер на одной и той же платформе, что и от клиента. Правила порта в Windows и Iptables на моей машине Linux. /> Я не просмотрел свой стек вызовов или что-либо, что касается отладчика, так как я не верю, что это программа. // client method to connect to a server
bool WebSock::connect(const char* address, const char* port)
{
struct addrinfo hints{}, *res = nullptr;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

if (getaddrinfo(address, port, &hints, &res) != 0)
return false;

std::cout ai_addr, (socklen_t) res->ai_addrlen) == 0);
freeaddrinfo(res);
return ok;
}
// server method to accept incoming connections
int WebSock::accept(sockaddr_in* clientAddr)
{
socklen_t len = clientAddr ? sizeof(*clientAddr) : 0;
auto client = ::accept(
_socket,
clientAddr ? reinterpret_cast(clientAddr) : nullptr,
clientAddr ? &len : nullptr
);
#if IS_WINDOWS
return (client == INVALID_SOCKET) ? -1 : static_cast(client);
#else
return client;
#endif
}
// method to set server socket into listening mode
bool WebSock::listen(int backlog)
{
return (::listen(_socket, backlog) == 0);
}
< /code>
// server instance code
try
{
// Allocate server safely on the stack
ctier::Server server("0.0.0.0", "1234", AF_INET, SOCK_STREAM, 0);

// Make sure server socket is ready
if (!server.getSocket())
{
throw std::runtime_error("Server socket initialization failed");
}

char buffer[1024];

while (true)
{
sockaddr_in client_addr{};
int clientFD = server.getSocket()->accept(&client_addr);

if (clientFD < 0)
{
#if IS_WINDOWS
int err = WSAGetLastError();
std::cerr

Подробнее здесь: https://stackoverflow.com/questions/797 ... cross-plat
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»