我正在做一個遊戲,我有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