我正在做一个游戏,我有2个客户端和一个服务器。 当我在游戏中移动时,我将数据发送到服务器(1-left,2-up,3-right,4-down)。 服务器将转发到其他客户端。C++ SFML tcp发送和接收
这里是服务器:
#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);
然后我开始两个客户端,并与我的第一个移动然后我收到了第二个客户端上完美的数据。 问题是什么?请帮我:)
u的太快应该添加消息帧发送数据修复它,因为TCP协议是面向流的不是面向分组。 – user1748906
我能做什么? – cylon
看看http://www.codeproject.com/Articles/37496/TCP-IP-Protocol-Design-Message-Framing – user1748906