Mon serveur reçoit le packet envoyé par mon client mais le client ne reçoit pas le packet envoyer du serveur.
- J'ai fais le port fowarding vers mon pc pour le port 14532.
- Mon serveur et mon client son exécuter sur la même machine.
- Mon ip local est 192.168.0.102
Mon but est de faire un petit chat en ligne. Normalement, je devrais utiliser TCP mais ce n'est que pour la pratique.
Voici le code serveur:
// ***************************************************************************************
#include <iostream>
// ***************************************************************************************
#include <sfml/network.hpp>
// ***************************************************************************************
using namespace std;
using namespace sf;
// ***************************************************************************************
void NetworkListener(void *Data)
{
SocketUDP Receiver;
Packet m;
IPAddress Address;
unsigned short port = 14532;
Receiver.Bind(port);
int i;
while (true)
{
Receiver.Receive(m, Address, port);
m >> i;
if(i == 104)
{
cout << "Received from client" << endl;
SocketUDP Sender;
Packet packet;
packet << 105;
Sender.Send(packet, Address, port);
Sender.Close();
}
}
Receiver.Close();
}
Thread NetworkListener_THREAD(&NetworkListener);
// ***************************************************************************************
string ToLower(string s)
{
unsigned int a = s.size();
for (unsigned int i = 0; i < a; ++i)
{
s[i] = tolower(s[i]);
}
return s;
}
// ***************************************************************************************
int main()
{
NetworkListener_THREAD.Launch();
string s;
while (getline(cin, s) && ToLower(s) != "/stop")
{
}
NetworkListener_THREAD.Terminate();
return 0;
}
// ***************************************************************************************
Voici le code client:
// ***************************************************************************************
#include <iostream>
// ***************************************************************************************
#include <sfml/network.hpp>
// ***************************************************************************************
using namespace std;
using namespace sf;
// ***************************************************************************************
unsigned short port = 14532;
// ***************************************************************************************
void NetworkListener(void *Data)
{
SocketUDP Receiver;
Packet m;
IPAddress Add;
unsigned short p = port;
Receiver.Bind(p);
int i;
while (true)
{
Receiver.Receive(m, Add, p);
m >> i;
if(i == 105)
{
cout << "Received from server" << endl;
}
}
Receiver.Close();
}
Thread NetworkListener_THREAD(&NetworkListener);
// ***************************************************************************************
string ToLower(string s)
{
unsigned int a = s.size();
for (unsigned int i = 0; i < a; ++i)
{
s[i] = tolower(s[i]);
}
return s;
}
// ***************************************************************************************
int main()
{
NetworkListener_THREAD.Launch();
SocketUDP Sender;
Packet packet;
packet << 104;
Sender.Send(packet, "192.168.0.102", port);
Sender.Close();
string s;
while (getline(cin, s) && ToLower(s) != "/stop")
{
}
NetworkListener_THREAD.Terminate();
return 0;
}
D'accord, j'ai effectué le changement de port dans le code de mon client mais j'ai toujours le même problème.
Code du client (Méthode NetworkListener):
void NetworkListener(void *Data)
{
SocketUDP Receiver;
Packet m;
IPAddress Add;
unsigned short p = 14533;
Receiver.Bind(p);
int i;
while (true)
{
Receiver.Receive(m, Add, p);
m >> i;
if(i == 105)
{
cout << "Received from server" << endl;
}
}
Receiver.Close();
}
donc si le client envoie des données sur le port 14533, le serveur les recevra sur le port 13569 ?
Non.
Toi tu fais ça :
Client | 14533 --> 14533 | Serveur
| 14533 <-- 14533 |
On voit tout de suite le problème : si les deux sont exécutés sur la même machine (donc le contexte qui nous intéresse), alors ils utilisent tous deux le même port, ce qui est impossible (1 port par socket par interface réseau).
Donc moi je propose ceci :
Client | 14533 --> 14533 | Serveur
| 13569 <-- 13569 |
Ainsi, chaque socket est bindée sur un port différent en réception.