即使没有连接客户端,服务器也会在编译时保持打印“已连接”

时间:2013-02-08 13:53:39

标签: c++ sockets

#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);

为struct SOCKADDR_IN myAddress

指定值
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 <<"noinfo\n";
    }
}
}

即使没有连接客户端,代码也不会显示“无信息”:O我duno wat我做错了:(请帮帮我

2 个答案:

答案 0 :(得分:1)

当然可以。您的代码中存在许多错误:

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)) {...}

P.S。发布剩下的代码,我确定还有很多其他错误等待发现。

答案 1 :(得分:0)

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

ZeroMemory(&myAddress,sizeof(myAddress));

条件语句后的分号是没用的