我正在制作一个游戏,我有 2 个客户端和一个服务器。当我在游戏中移动时,我将数据发送到服务器(1-left,2-up,3-right,4-down)。服务器向前发送到另一个客户端。
这是服务器:
#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 上运行,客户端在我的笔记本电脑上运行。如果我启动两个客户端并移动一个客户端,我会在每个客户端中以错误的顺序收到错误的数据包(?)。
如果我删除这一行:
recAndGive(Client2,Client1);
然后我启动了两个客户端,并与第一个客户端一起移动,然后我在第二个客户端上收到了完美的数据。问题是什么?请帮我 :)