服务器设置在编译时保持打印"connected"即使没有连接客户端

the server is set up keeps printing "connected" when compiled even though there are no clients connected

本文关键字:connected 客户端 连接 打印 设置 编译 服务器      更新时间:2023-10-16
#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
using namespace std;
SOCKET listener,connector;
SOCKADDR_IN myAddress,remoteAddress;
int main()
{

初始化网络的窗口

WSAData wdata;
WSAStartup(MAKEWORD(2,2),&wdata);

初始化侦听器

ZeroMemory(&listener,sizeof(listener));
ZeroMemory(&connector,sizeof(connector));
listener = socket(AF_INET,SOCK_STREAM,0);

在myAddress 中为结构体SOCKADDR_IN赋值

myAddress.sin_addr.s_addr = INADDR_ANY; //accept any ip
myAddress.sin_family = AF_INET;//tcp
myAddress.sin_port = htons(7000);//changing 7000 port to string with htons method

绑定侦听器套接字和地址以指示侦听器查找的位置

if(bind(listener,(LPSOCKADDR)&myAddress,sizeof(listener)))
{
    cout<< "bound";
}
//listen method
if(listen(listener,1));
{
cout<<"Waiting";
}
int Size = sizeof(remoteAddress);

初始化无限循环以保持侦听

while(true)
{
    connector = accept(listener,(LPSOCKADDR)&remoteAddress,&Size);
    //read connection request
    if(sizeof(connector)< 0)
    {
        cout <<"noinfon";
    }
}
}

即使没有连接客户端,代码也不会显示"无信息":O i duno wat i did wrong:(请帮助我

当然可以。你的代码中有很多错误:

1( connector的大小不能小于0,因此if(sizeof(connector)< 0)检查始终为false。请改用if(connector == INVALID_SOCKET)

2( 删除if语句末尾的;,否则您的检查将变得毫无意义:

if(bind(listener,(LPSOCKADDR)&myAddress,sizeof(listener))) {...}
if(listen(listener,1)) {...}

附言:发布剩下的代码,我相信还有很多其他错误等待发现。

您的代码是正确的,但您必须用零填充结构myAddress,而不是Socket

ZeroMemory(&myAddress,sizeof(myAddress));

条件语句后的分号不使用