C++ C++;SFML tcp发送和接收

C++ C++;SFML tcp发送和接收,c++,sockets,tcp,packet,sfml,C++,Sockets,Tcp,Packet,Sfml,我正在做一个游戏,我有两个客户端和一个服务器。 当我在游戏中移动时,我将数据发送到服务器(1-左、2-上、3-右、4-下)。 服务器将转发到另一个客户端 这是服务器: #include <iostream> #include <SFML/Network.hpp> #include <SFML/System.hpp> using namespace std; void recAndGive(sf::SocketTCP fromSock, sf::SocketT

我正在做一个游戏,我有两个客户端和一个服务器。 当我在游戏中移动时,我将数据发送到服务器(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;
}
然后我启动了两个客户机,使用第一个客户机移动,然后在第二个客户机上接收到完美的数据。 有什么问题?请帮帮我:)

如果您使用本指南,应该不会有任何问题

我唯一的问题是,当我添加类似于
packet p2CoorX>>p2CoorY
的数据包时,我遇到了一个大问题,问题是,数据包根本没有清洗。所以它把coorX和coorY放到包中,并且它一次又一次地这样做。。。数据包变得越来越大,而当它越来越大时,接收部分(
packet>>p2CoorX>>p2CoorY
)只读取前两个变量


这是我的问题,但我用
packet.clear()修复了它

u如果发送数据太快,则应添加消息帧,因为tcp协议是面向流的而不是面向包的。在完成之前,请查看不应
sf::packet
块?
recAndGive(Client2,Client1);