SFML 套接字 发送数据包时设置为 sf::套接字::错误
SFML Socket Being set to sf::Socket::Error when sending a packet
我正在尝试使用UDP和数据包来创建用于游戏开发的网络框架。 我能够接收从客户端发送到服务器的数据包,但是当服务器尝试发送数据包以响应它收到的数据包时,套接字的状态设置为错误并且不发送数据包。 以下是受影响的服务器代码:
服务器.cpp文件:
#include "ServerCore.hpp"
#include "Packet.hpp"
#include <SFML/Network/IpAddress.hpp>
#include <iostream>
ServerCore::ServerCore(int port)
: mSocketRecv()
, mSocketSend()
{
mPort = port;
}
void ServerCore::enterServerLoop()
{
if(mSocketRecv.bind(mPort) != sf::Socket::Done)
{
std::cout << "SOMETHING DIDNT WORK" << std::endl;
}
std::cout << "Initialized Server" << std::endl;
unsigned short port;
sf::IpAddress ip;
while(true)
{
std::cout << ":D" << std::endl;
sf::Packet packet;
std::size_t recieved;
if(mSocketRecv.receive(packet, ip, port) != sf::Socket::Done)
{
}
int x;
if(packet >> x)
{
if(x == ClientPacket::PlayerConnect)
{
std::cout << "Player Connected!" << std::endl;
sf::Packet packet;
packet << ServerPacket::ServerStop;
if(mSocketSend.send(packet, mSender, 54000) != sf::Socket::Done)
{
std::cout << "I AM SAD" << std::endl;
}
}
if(x == ClientPacket::PlayerDisconnect)
std::cout << "Player Disconnected!" << std::endl;
if(x == ClientPacket::PlayerQuit)
std::cout << "Player Quit!" << std::endl;
if(x == ClientPacket::PlayerJoin)
std::cout << "Player Join!" << std::endl;
}
std::cout << "Recieved " << recieved << " bytes from " << ip << " on port " << port << std::endl;
}
}
和服务器 .hpp 文件:
#pragma once
#include <SFML/Network/UdpSocket.hpp>
#include <SFML/Network/IpAddress.hpp>
#include <SFML/Network/Packet.hpp>
class ServerCore
{
public:
ServerCore(int port);
void enterServerLoop();
private:
sf::UdpSocket mSocketRecv;
sf::UdpSocket mSocketSend;
sf::IpAddress mSender;
int mPort;
};
这是受影响的代码块(特别是未按预期工作的位置):
if(x == ClientPacket::PlayerConnect)
{
std::cout << "Player Connected!" << std::endl;
sf::Packet packet;
packet << ServerPacket::ServerStop;
if(mSocketSend.send(packet, mSender, 54000) != sf::Socket::Done)
{
std::cout << "I AM SAD" << std::endl;
}
}
关于如何解决这个问题的任何想法?
我会
说数据包大于UdpSocket::MaxDatagramSize(见此),您可以使用getDataSize()来检查它。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- SFML 套接字 发送数据包时设置为 sf::套接字::错误