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);

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

1 ответ

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

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

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

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

Другие вопросы по тегам