2014-05-25 145 views
0

我是SFML网络的小菜鸟,我想我做的都错了,我不断地收到这段代码的错误。我想要做的就是发送位置数据包,然后在另一个窗口上更新它们,这是我目前为止的内容。SFML网络问题

#include <iostream> 
#include <string> 

#include "player.h" 
#include "gameAssets.h" 
#include "zombie.h" 

using namespace std; 


sf::Vector2u size(1000, 800); 

bool focused = true; 

sf::Vector2f newPosition, oldPosition; 

//Multiplayer code. 
//sf::Thread* thread = 0; 
char choice; 
sf::Mutex globalMutex; 
sf::TcpSocket socket; 
sf::IpAddress ip; 


void sendandReceiveData(){ 
    //Server half 
    sf::Packet packetSendX, packetSendY; 

    packetSendX << oldPosition.x; 
    packetSendY << oldPosition.y; 

    socket.send(packetSendX); 
    socket.send(packetSendY); 

    sf::Packet packetReceiveX, packetReceiveY; 

    //Client half 
    socket.receive(packetReceiveX); 
    socket.receive(packetReceiveY); 

    packetReceiveX >> newPosition.x; 
    packetReceiveY >> newPosition.y; 

    cout << "Other Players X: " << newPosition.x << endl; 
    cout << "Other Players Y: " << newPosition.y << endl; 
} 

int main(){ 

    sf::RenderWindow window(sf::VideoMode(size.x, size.y), "Zombie Defence", sf::Style::Titlebar | sf::Style::Close); 

    //Limited fps so we dont need deltaTime... 
    window.setFramerateLimit(60); 
    window.setVerticalSyncEnabled(true); 

    player player; 
    zombie zombie; 
    gameAssets gameAssets; 


    player.initialize(); 
    zombie.initialize(); 
    gameAssets.initialize(); 

    gameAssets.loadContent(); 
    zombie.loadContent(); 
    player.loadContent(); 

    //Multiplayer code. 
    system("CLS"); 
    cout << "Multiplayer Dev Build 0.1" << endl; 
    cout << " " << endl; 
    cout << "Enter (S) for server or (C) for client." << endl; 
    cin >> choice; 

    if (choice == 'S'){ 
     sf::TcpListener listener; 
     listener.setBlocking(false); 
     listener.listen(5000); 
     listener.accept(socket); 
     cout << "New Client Connected: " << socket.getRemoteAddress() << endl; 

    } 
    else if (choice == 'C'){ 
     cin >> ip; 

     if (socket.connect(ip, 5000) == sf::Socket::Done){ 
      cout << "Connected to server" << endl; 
     } 
    } 

    while (window.isOpen()){ 

     sf::View view = player.getView(); 
     sf::Vector2f playerPosition = player.getPosition(); 

     sf::Event event; 

     while (window.pollEvent(event)){ 
      if (event.type == sf::Event::Closed){ 
       window.close(); 
      } 

      if (event.type == sf::Event::GainedFocus){ 
       focused = 1; 
      } 
      else if (event.type == sf::Event::LostFocus){ 
       focused = 0; 
      } 
     } 

     //Only update if window is focused... 
     if (focused){ 
      //Updating 
      player.update(window); 

      zombie.followPlayer(playerPosition); 
      zombie.update(window); 

      window.setView(view); 
     } 

     oldPosition = player.getPosition(); 
     sendandReceiveData(); 

     window.clear(); 
     gameAssets.draw(window); 
     zombie.draw(window); 
     player.draw(window); 
     window.display(); 
    } 
    return 0; 
} 

如果有人可以帮我一下我做错了什么,我将不胜感激,谢谢。

+0

错误是...? – deviantfan

+0

@deviantfan不断收到packetSendX和packetReceiveY的损坏数据包,同时也发生缓冲区溢出。 – DaedricWolf

+0

@DaedricWolf在这么少的信息中帮助你并不容易。您可以尝试创建一个能够重现问题的最小代码,以便我们可以轻松地在自己的计算机上进行测试。此外,试图使用调试器可能会帮助您找出发生的情况。 – Levans

回答

1

我修好了。我所要做的只是添加packetReceiveX.clear();y来解决这个问题。