未能收听和连接 winsock2

failed to listen and connect winsock2

我的 Windows 套接字代码有问题,是使用 wxDev 用 C++ 编写的。下面代码的输出是:

Starting...
: Compatible...
: Created...
: Binding Done...
: Cannot listen...
: Error connecting...
:::Cleaned:::

我不知道为什么监听和连接失败。

代码

void serverFrm::serverClick(wxCommandEvent& event)
{
    SOCKET sockh, socka;
    WSADATA wsadata;
    sockaddr_in sockAddr;

    if (WSAStartup(MAKEWORD(2, 2), &wsadata) == 0) {
        box->AppendText(_(" : Starting...\n"));
    }
    if (LOBYTE(wsadata.wVersion) >= 2) {
        box->AppendText(_(" : Compatible...\n"));
    }

    sockh = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sockh != SOCKET_ERROR) {
        box->AppendText(_(" : Created...\n"));
    }
    else {
        box->AppendText(_(" : Error connecting...\n"));
    }

    sockAddr.sin_family = AF_INET;
    sockAddr.sin_port = htons(6788);
    sockAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    if (bind(sockh, (sockaddr*)(&sockAddr), sizeof(sockAddr)) != SOCKET_ERROR) {
        box->AppendText(_(" : Binding Done...\n"));
    }
    else {
        box->AppendText(_(" : Error binding...\n"));
    }

    if (listen(sockh, SOMAXCONN) != 0) {
        box->AppendText(_(" : Listening...\n"));
    }
    else {
        box->AppendText(_(" : Cannot listen...\n"));
    }

    int siz = sizeof(sockh);
    if (accept(sockh, reinterpret_cast<sockaddr*>(&sockAddr), &siz) != SOCKET_ERROR) {
        box->AppendText(_(" : Connected...\n"));
    }
    else {
        box->AppendText(_(" : Error connecting...\n"));
    }

    closesocket(sockh);
    if (WSACleanup() == 0)
        box->AppendText(_(":::Cleaned:::\n"));
}
if(listen(sockh, SOMAXCONN)!=0)

This function returns 0 when it succeeds。你的条件检查是倒退的。

阅读文档,看在 Kahless 的份上,正确缩进您的代码。