我差不多完成了这个服务器的制作但是在我完成它之前我想测试它,但是当我这样做时,在任何人连接它之前继续说“已达到连接”。我希望它说,当有人真正连接到它时,“已达到连接”。有什么帮助吗?
#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;
}
答案 0 :(得分:2)
这里有一个问题:
Server.sin_port = 6667;
端口号必须是网络字节顺序,这与通用x86平台的字节顺序相反。而是做
Server.sin_port = htons(6667);
您的代码还存在许多其他问题,例如Joachim Isaksson在评论中指出的问题。
还有:
if(Connect=accept(Listen,(SOCKADDR*)&Server,&size))
您必须记住accept
在出错时返回SOCKET_ERROR
(或-1
),这是“真实的”