私はゲームを作っています。2つのクライアントと1つのサーバーがあります。ゲーム内を移動すると、サーバーにデータが送信されます(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;
}
うまくいきません。サーバーは私のPCで実行され、クライアントは私のラップトップで実行されます。2つのクライアントを起動し、1つで移動すると、各クライアントで間違った順序で間違ったパケットを受信します(?)。
この行を削除すると:
recAndGive(Client2,Client1);
次に、2つのクライアントを起動し、最初のクライアントで移動してから、2番目のクライアントで完全なデータを受け取ります。何が問題ですか?私を助けてください :)