Я почти закончил создание этого сервера, но до того, как я его закончил, я хотел проверить его, но когда я это делаю, он продолжает говорить, что "было достигнуто соединение", прежде чем кто-либо подключится к нему. Я хочу сказать, что "соединение было достигнуто", когда кто-то действительно подключается к нему. любая помощь?
#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;
}
Одна из проблем здесь:
Server.sin_port = 6667;
Номер порта должен быть в байтовом порядке сети, что противоположно порядку байтов общей платформы x86. Вместо этого
Server.sin_port = htons(6667);
Также есть много других проблем с вашим кодом, например, те, которые указаны в комментарии Йоахима Исакссона.
Существует также следующее:
if(Connect=accept(Listen,(SOCKADDR*)&Server,&size))
Вы должны помнить, что accept
возвращает SOCKET_ERROR
(или -1
) при ошибке, которая является "истиной",
accept
первый, а затем проверить на наличие ошибок в отдельности, может быть проще для вас.
SOCKET Listen =(AF_INET,SOCK_STREAM,NULL);
иSOCKET Connect =(AF_INET,SOCK_STREAM,NULL);
не имеет смысла в этом контексте. Может быть, они должны быть вызовыsocket
?