gpt4 book ai didi

c++ - 如何在一台本地机器/主机上对简单的 tcp 客户端/服务器进行单元测试?

转载 作者:太空狗 更新时间:2023-10-29 21:26:49 25 4
gpt4 key购买 nike

我目前是第一次包装 BSD 套接字,并且还对我的结果进行了单元测试。无论如何,我在编写一个简单的测试来测试我的 Acceptor 和 TcpSocket 类时遇到了一个问题,这与重用本地主机地址有关,即

伪代码:

//server thread
{
//binds, listens and accepts on port 50716 on localhost
TcpAcceptor acceptor(Resolver::fromService("50716"));
//i get a ECONNREFUSED error inside the accept function when trying to create newSock
TcpSocket newSock = acceptor.accept();
}

//connect in the main thread
TcpSocket connectionSocket(Resolver::resolve(Resolver::Query("localhost", "50716")));

甚至可以在同一个主机/端口上监听和连接吗?有没有办法在同一台机器/主机上运行简单的客户端/服务器测试?

谢谢!

编辑:

太好了,一切正常了!仅供引用,我在这个过程中也注意到,你甚至不需要使用线程,即使你使用阻塞套接字来执行一个简单的测试,如果你像这样将 listen 与 accept 解耦:

//server socket
TcpAcceptor acceptor;
acceptor.bind(Resolver::fromService("0"));
acceptor.listen();

//client socket, blocks until connection is established
TcpSocket clientSock(SocketAddress("127.0.0.1", acceptor.address().port()));

//accept the connection, blocks until one accept is done
TcpSocket connectionSock = acceptor.accept();

//send a test message to the client
size_t numBytesSent = connectionSock.send(ByteArray("Hello World!"));

//read the message on the client socket
ByteArray msg(12);
size_t bytesReceived = clientSock.receive(msg);
std::cout<<"Num Bytes received: "<<bytesReceived<<std::endl;
std::cout<<"Message: "<<msg<<std::endl;

像这样构建测试可以得到漂亮而简单的测试用例,即使对于阻塞函数也是如此。

最佳答案

是的,这是可能的。没有服务器和客户端必须是不同进程的限制。一个线程可以打开/监听套接字,其他线程可以连接到它。

关于c++ - 如何在一台本地机器/主机上对简单的 tcp 客户端/服务器进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com