Что не так с моим кодом сервера (c ++)

0

Я почти закончил создание этого сервера, но до того, как я его закончил, я хотел проверить его, но когда я это делаю, он продолжает говорить, что "было достигнуто соединение", прежде чем кто-либо подключится к нему. Я хочу сказать, что "соединение было достигнуто", когда кто-то действительно подключается к нему. любая помощь?

#pragma comment(lib, "Ws2_32.lib")
#include<iostream>
#include<WinSock2.h>

using namespace std;

int main()
{

   WSAData wsa;

   int iresult =WSAStartup(MAKEWORD(2,1), &wsa);

   SOCKADDR_IN Server;

   Server.sin_addr.s_addr=inet_addr("127.0.0.1");

   Server.sin_family = AF_INET;

   Server.sin_port = 6667;

   SOCKET Listen =(AF_INET,SOCK_STREAM,NULL);

   listen (Listen, SOMAXCONN);

   bind(Listen,(SOCKADDR*)&Server,sizeof(Server));

   SOCKET Connect =(AF_INET,SOCK_STREAM,NULL);

   int size = sizeof(Server);

   std::cout<<"Waiting for connections";

   for(;;)
   {
    if(Connect=accept(Listen,(SOCKADDR*)&Server,&size)) {
        std::cout<<"connection was reached";
        break;
        }
    }


  WSACleanup();

  cin.get();

  return 0;
}
  • 2
    SOCKET Listen =(AF_INET,SOCK_STREAM,NULL); и SOCKET Connect =(AF_INET,SOCK_STREAM,NULL); не имеет смысла в этом контексте. Может быть, они должны быть вызовы socket ?
  • 0
    @JoachimIsaksson, поэтому я должен избавиться от этого, и если я должен тогда, что мне делать вместо этого?
Показать ещё 2 комментария
Теги:
client

1 ответ

2

Одна из проблем здесь:

Server.sin_port = 6667;

Номер порта должен быть в байтовом порядке сети, что противоположно порядку байтов общей платформы x86. Вместо этого

Server.sin_port = htons(6667);

Также есть много других проблем с вашим кодом, например, те, которые указаны в комментарии Йоахима Исакссона.

Существует также следующее:

if(Connect=accept(Listen,(SOCKADDR*)&Server,&size))

Вы должны помнить, что accept возвращает SOCKET_ERROR (или -1) при ошибке, которая является "истиной",

  • 0
    так вы говорите, что если (Connect = accept (Listen, (SOCKADDR *) & Server, & size)) там не должно быть или как? а если не должен, то что должен? это так запутанно
  • 0
    @ user2626734 Я говорю, что условие будет истинным как для правильного принятия, так и при возникновении ошибки. Вызов accept первый, а затем проверить на наличие ошибок в отдельности, может быть проще для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню