сокеты — C ++ SFML tcp отправлять и получать

Я делаю игру, у меня есть 2 клиента и сервер.
Когда я двигаюсь в игре, я отправляю данные на сервер (1 слева, 2 вверх, 3 справа, 4 вниз).
Сервер отправляет пересылку другому клиенту.

Вот сервер:

#include <iostream>
#include <SFML/Network.hpp>
#include <SFML/System.hpp>
using namespace std;

void recAndGive(sf::SocketTCP fromSock, sf::SocketTCP toSock)
{
sf::Packet Packet;
if(fromSock.Receive(Packet) == sf::Socket::Done)
{
toSock.Send(Packet);
}

}

int main()
{
cout << "Server is running. [192.168.1.100] [4567]" << endl << endl;
sf::IPAddress Client1_ip;
sf::IPAddress Client2_ip;

sf::SocketTCP Client1;
sf::SocketTCP Client2;

sf::SocketTCP Listener;

if(!Listener.Listen(4567))
return 1;

cout << "Server is listenig to port 4567, waiting for connections..." << endl;

//waiting for client1
Listener.Accept(Client1,&Client1_ip);
cout << "Client connected : " << Client1_ip << endl;

//waiting for client2
Listener.Accept(Client2,&Client2_ip);
cout << "Client connected : " << Client2_ip << endl;

while(true)
{
recAndGive(Client1,Client2);
recAndGive(Client2,Client1);
}return 0;
}

Это не работает хорошо. Сервер работает на моем ПК, клиенты работают на моем ноутбуке.
Если я запускаю двух клиентов и перехожу с одного, я получаю неправильные пакеты в неправильном порядке на каждом клиенте (?).

Если я уберу эту строку:

recAndGive(Client2,Client1);

затем я запускаю двух клиентов и перехожу к первому, а затем получаю точные данные по второму клиенту.
В чем проблема? Пожалуйста, помогите мне 🙂

0

Решение

http://sfml-dev.org/tutorials/2.1/network-socket.php

У вас не должно возникнуть никаких проблем, если вы используете это руководство.

Единственная проблема у меня была, когда я добавляю как packet << coorX << coorYи откройте этот пакет как packet >> p2CoorX >> p2CoorY, У меня была большая проблема, проблема была, пакет не чистил вообще. поэтому он помещает coorX и coorY в пакет, и он делает это снова и снова … пакет становится действительно большим, и в то время как он становится больше, принимающая часть (packet >> p2CoorX >> p2CoorY) читает только первые две переменные.

Это была моя проблема, но я исправил ее с помощью packet.clear();

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]