Я пишу этот кроссплатформенный класс сокетов, используя 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
Почему я не могу установить соединение между Winsock и Socket в кроссплатформенном настройке? [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1759773575
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79783948/why-cant-i-establish-a-connection-in-between-winsock-and-socket-in-a-cross-plat[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия