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