首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SFML使用不起作用的结构发送数据包

SFML使用不起作用的结构发送数据包
EN

Stack Overflow用户
提问于 2013-10-08 04:32:50
回答 1查看 629关注 0票数 0

因此,我试图让我的服务器向我的客户端发送一个包含操作码和大小的数据包,但当我发送它时,它什么都没有打印出来/不起作用。

我在代码中使用了一种结构,结构如下;

代码语言:javascript
复制
struct PacketFormatHeader
{
    unsigned short size; // How many bytes are in the data
    unsigned short opcode; // The operation code of this packet
} _packet;

这是我用来发送数据包的服务器login.cpp。

代码语言:javascript
复制
#include "NetServer.h"
using namespace net;

Login::Login(void)
{
}

Login::~Login(void)
{
}

sf::Packet& operator <<(sf::Packet& packet, const Packet::PacketFormatHeader& p)
{
    return packet << p.size << p.opcode;
}
sf::Packet& operator >>(sf::Packet& packet, Packet::PacketFormatHeader& p)
{
    return packet >> p.size >> p.opcode;
}

bool Login::CheckAccount()
{
    if(p.IsPlayerBanned() == true) {
        //  DenyLogin();
    }
    if(_checkAccountInUse == true) {
        //DenyLogin();
    }
    return _accountPassed = true;
}

void Login::HandleLogin()
{
    sf::Uint32 x = 12;
    pac._packet.size = x;
    pac._packet.opcode = 1;

    sf::Packet packet;
    sf::Packet& operator <<(sf::Packet& packet, const Packet::PacketFormatHeader& p);
    packet << pac._packet.size << pac._packet.opcode;
    net.client.send(packet);
    util::Logger::Dbg("Login step one passed: Sent first packet: Opcode 1");
}

当它被调用时,它创建了数据包(我希望如此),然后客户端应该会收到它。这是我的客户网络(自从我试图让它工作一段时间以来,它就变得一团糟)

代码语言:javascript
复制
#include "Network.h"

Network::Network(void)
{
}

Network::~Network(void)
{
}

struct PacketFormatHeader
{
    unsigned short size; // How many bytes are in the data
    unsigned short opcode; // The operation code of this packet
} _packet;

sf::Packet& operator <<(sf::Packet& packet, const PacketFormatHeader& p)
{
    return packet << p.size << p.opcode;
}
sf::Packet& operator >>(sf::Packet& packet, PacketFormatHeader& p)
{
    return packet >> p.size >> p.opcode;
}

void Network::InitNetwork(const sf::IpAddress &remoteAdress, int port)
{
    sf::Socket::Status status = socket.connect(remoteAdress, port);

    if (status != sf::Socket::Done)
    {
        cout << "Could not connect to server" << endl;
        SetConnected(false);
        RetryConnection("25.196.76.171", 12975);
    } else {
        cout << "Connected to server" << endl;
        SetConnected(true);

        socket.setBlocking(false);

        sf::Packet& operator <<(sf::Packet& packet, const PacketFormatHeader& p);
        sf::Packet& operator >>(sf::Packet& packet, PacketFormatHeader& p);

        // Receive the packet at the other end
        sf::Packet packet;
        socket.receive(packet);
        // Extract the variables contained in the packet
        _packet.opcode;
        _packet.size;
        if (packet >> _packet.opcode >> _packet.size)
        {
            cout << "Data extracted successfully" << endl;
            cout << _packet.opcode << _packet.size << endl;
        }
    }
}

void Network::SetConnected(bool i)
{
    i = this->_isConnected;
}

bool Network::GetConnected()
{
    return _isConnected;
}

void Network::RetryConnection(const sf::IpAddress &remoteAdress, int port)
{
    for (int i = 0; i < 5; i++) {
        sf::Socket::Status status = socket.connect(remoteAdress, port);

        if (status != sf::Socket::Done)
        {
            cout << "Retrying for connection" << endl;
            SetConnected(false);
        } else {
            cout << "Connected to server" << endl;
            SetConnected(true);
        }
    }
    MessageBoxes::Error(0, MB_OK, "Could not establish connection with the server: system exiting");
    exit(EXIT_FAILURE);
}

任何帮助我都会非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2014-03-15 20:36:31

SFML包元素将以与它们被写入的相同的顺序被读取:

代码语言:javascript
复制
if (packet >> _packet.size >> _packet.opcode)

但是,您为PacketFormatHeader正确定义了写(<<)和读(>>)运算符,为什么不使用它们呢?

代码语言:javascript
复制
// Server code
packet << pac;

// Client code
if (packet >> _packet) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19234199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档