1

我在我的 C++ 代码中使用 SFML。我的问题类似于这个问题(SFML TCP packet receive),但由于答案不满足我,我决定问一个新问题。

在我的代码中,服务器和客户端需要交换确认消息才能进入程序的下一阶段。但是,当服务器期望从客户端接收消息时,窗口冻结并显示“未响应”,我该如何解决这个问题?我已经让 setBlocking 变量为假。

我的代码如下:

sf::Socket::Status status;
string msg;
if (isServer)
{
    do {
        status = host.receiveMessage(msg);
    } while (status != sf::Socket::Done || msg!= "done1");

    status = host.sendMessage("done1");

}
else
{
    do {
        status = host.sendMessage("done1");
    } while (status != sf::Socket::Done);

    do {
        status = host.receiveMessage(msg);
    } while (status != sf::Socket::Done || msg!= "done1");
}
4

2 回答 2

0

我不能说我自己尝试过,但你可能会发现 SFML 游戏开发书的源代码很有用。

有一整章是关于使用 sfml 联网的(最后一章),您可能会在那里找到所需的所有答案。

于 2013-09-17T10:08:36.830 回答
0

您应该创建一个额外的线程来与客户端通信。或者使用另一种套接字模型,当传入数据可用时,窗口会收到一条消息。

于 2013-09-08T11:49:50.110 回答