Bonjour, je m'essaye aux réseaux pour un petit projet qui me tient à coeur depuis environ un an.
C'est un jeu que j'avais codé sur Casio 35+ mais qui était moche (on est sur Casio), imprécis (pas de pixels, j'utilisais les cases entières) ,injouable à deux , pas assez de mémoire, mauvaise gestion des events et une IA stupide (aléatoire).
Enfin bref, le jour où j'ai crée ce jeu pour la première fois, je savais que sur Casio il serait pourri, mais le concept en réseau sera bluffant, et je le partagerais dès que possible
En attendant, il va me servir d'entraînement pour manipuler le réseau.
Mon problème : Je lance le serveur, ensuite je lance un client, connexion réussie, je lance un deuxième client et .... plantage du client et de l'autre qui attends toujours une réponse..
Voici mon code : SERVEUR :
int nbConnect = 0;
sf::UdpSocket socket1;
socket1.bind(55001);
sf::UdpSocket socket2;
socket2.bind(55002);
sf::IpAddress sender1;
sf::IpAddress sender2;
while(nbConnect < 2)
{
char buffer[1024];
std::size_t received = 0;
unsigned short port;
if(nbConnect == 0)
{
if(socket1.receive(buffer, sizeof(buffer), received, sender1, port) == sf::Socket::Status::Done)
{
std::string message = "1";
nbConnect++;
std::cout << "1 client" << std::endl;
}
}
if(nbConnect == 1)
{
if(socket2.receive(buffer, sizeof(buffer), received, sender2, port) == sf::Socket::Status::Done)
{
std::string message = "2";
nbConnect++;
std::cout << "2 client" << std::endl;
}
}
}
socket1.send(x1.c_str(), x1.size() + 1, sender1,55000);
socket1.send(x2.c_str(), x2.size() + 1, sender1,55000);
socket2.send(x1.c_str(), x1.size() + 1, sender2,55000);
socket2.send(x2.c_str(), x2.size() + 1, sender2,55000);
CLIENT :
//On reçoit sur le port 55000
sf::UdpSocket socket;
socket.bind(55000);
//On envoit n'importe quoi sur le port pour que le serveur obtienne notre adresse, si marche pas, on teste le port 2
int Port = 55001;
sf::IpAddress Server = sf::IpAddress::LocalHost;
std::string message = "0";
int numJoueur = 1;
if(socket.send(message.c_str(), message.size() + 1, Server, Port) != sf::Socket::Status::Done)
{
Port++;
numJoueur++;
socket.send(message.c_str(), message.size() + 1, Server, Port);
}
//Reception des positions des vaisseaux
char buffx1[3];
char buffx2[3];
std::size_t received = 0;
sf::IpAddress sender; //Adresse du serveur
unsigned short port; //Port du serveur
socket.receive(buffx1, sizeof(buffx1), received, sender, port);
socket.receive(buffx2, sizeof(buffx2), received, sender, port);
v1.setPosition(StrToNb(buffx1), 50);
v2.setPosition(StrToNb(buffx2), 330);
Il est fort probable que je n'utilise pas bien la gestion des sockets et des ports ...
Merci d'avance