ServerSocket引发InvalidArgumentException,但文档未指定原因。为什么?

时间:2019-06-30 21:23:01

标签: c++ serversocket poco-libraries

我正在使用Poco创建网络服务器。我在ServerSocket库中遇到错误。这是重现该错误的最低代码。

#include <iostream>
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketAddress.h"
#define PORT (unsigned short) 3000
int main()
{
    Poco::Net::ServerSocket x;
    x.bind(PORT);
    Poco::Net::StreamSocket conn;
    Poco::Net::SocketAddress clientAddr;
    try {
        conn = x.acceptConnection(clientAddr);
    }
    catch (Poco::InvalidArgumentException e) {
        printf("Oh no! %s\n", e.displayText().c_str());
        return 1;
    }
    printf("Huzzah!");
    return 0;
}

我试图看一下[docs](https://pocoproject.org/docs/Poco.Net.ServerSocket.html#25093)来理解该错误,但是它甚至没有将该函数列为抛出该错误。我也尝试过该函数的无参数版本,但它仍然会抛出此异常(对我来说,这不是抛出错误的函数,而是子函数)。为什么?以及如何解决或解决它?

1 个答案:

答案 0 :(得分:1)

正如WhozCraig所说,问题不在于使它处于监听状态。代码应该是

#include <iostream>
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketAddress.h"
#define PORT (unsigned short) 3000
int main()
{
    Poco::Net::ServerSocket x;
    x.bind(PORT);
    x.listen(1); // or number of acceptable connections
    Poco::Net::StreamSocket conn;
    Poco::Net::SocketAddress clientAddr;
    try {
        conn = x.acceptConnection(clientAddr);
    }
    catch (const Poco::InvalidArgumentException& e) {
        printf("Oh no! %s\n", e.displayText().c_str());
        return 1;
    }
    printf("Huzzah!");
    return 0;
}