Server modifié + Client modifie: Le server arrive a donner un port unique à chaque client, mais n'arrive plus à recevoir des données. à voir
continuous-integration/drone/push Build is failing Details

pull/6/head
Bruno DA COSTA CUNHA 2 years ago
parent e59867d7f5
commit a2c6a111c0

@ -1,32 +1,43 @@
using System; using System;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text;
class Program class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
Console.WriteLine("Welcome to Pong Multiplayer - Client"); Console.WriteLine("Welcome to LeapHit Multiplayer - Client");
StartClient(); StartClient();
} }
static void StartClient() static void StartClient()
{ {
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3131); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3131);
//IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("82.165.19.245"), 3131);
//IPEndPoint endPoint = new IPEndPoint(Dns.GetHostAddresses("leaphit.hulivet.fr").FirstOrDefault(), 3131);
UdpClient client = new UdpClient(); UdpClient client = new UdpClient();
Console.WriteLine("Client connected to server: " + endPoint.ToString());
while (true) // Send connection message to server
string connectionMessage = "Connect";
byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage);
client.Send(connectionData, connectionData.Length, serverEndPoint);
// Receive connection message from server
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] receivedData = client.Receive(ref remoteEndPoint);
string receivedMessage = Encoding.ASCII.GetString(receivedData);
Console.WriteLine("Received message: " + receivedMessage);
// Send data to server
string message = "";
while (message != "exit")
{ {
Console.WriteLine("Enter data to send to server:"); Console.Write("Enter message to send (or 'exit' to quit): ");
string data = Console.ReadLine(); message = Console.ReadLine();
byte[] dataToSend = System.Text.Encoding.ASCII.GetBytes(data); byte[] data = Encoding.ASCII.GetBytes(message);
client.Send(dataToSend, dataToSend.Length, endPoint); client.Send(data, data.Length, serverEndPoint);
} }
// Close client
client.Close();
} }
} }

@ -1,12 +1,14 @@
using System; using System;
using System.Collections.Generic;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Collections.Generic; using System.Text;
using System.Threading; using System.Threading;
class Program class Program
{ {
static Dictionary<IPEndPoint, UdpClient> clients = new Dictionary<IPEndPoint, UdpClient>(); static Dictionary<IPEndPoint, UdpClient> clients = new Dictionary<IPEndPoint, UdpClient>();
static int nextPort = 3132;
static void Main(string[] args) static void Main(string[] args)
{ {
@ -16,64 +18,47 @@ class Program
static void StartServer() static void StartServer()
{ {
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3131); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, 3131);
UdpClient server = new UdpClient(endPoint); UdpClient serverSocket = new UdpClient(serverEndPoint);
Thread receiveThread = new Thread(ServerReceiveMessages);
receiveThread.Start(server);
Console.WriteLine("Server started, waiting for clients to connect..."); Console.WriteLine("Server started, waiting for clients to connect...");
Console.WriteLine(endPoint.Address.ToString());
// Stop Server
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
receiveThread.Abort();
foreach (UdpClient clientSocket in clients.Values)
{
clientSocket.Close();
}
server.Close();
}
static void ServerReceiveMessages(object obj)
{
UdpClient serverSocket = (UdpClient)obj;
while (true) while (true)
{ {
IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, 0); IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = serverSocket.Receive(ref remoteEndpoint); byte[] receivedData = serverSocket.Receive(ref remoteEndPoint);
string message = Encoding.ASCII.GetString(receivedData);
if (!clients.ContainsKey(remoteEndpoint)) if (message == "Connect")
{ {
clients[remoteEndpoint] = new UdpClient(); Console.WriteLine("New connection from " + remoteEndPoint.ToString());
clients[remoteEndpoint].Client.Bind(new IPEndPoint(IPAddress.Any, 31323));
}
string connectionMessage = "Connection established."; // Assign a unique port to the client
byte[] connectionData = System.Text.Encoding.ASCII.GetBytes(connectionMessage); IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort++); ;
clients[remoteEndpoint].Send(connectionData, connectionData.Length, remoteEndpoint.Address.ToString(), remoteEndpoint.Port); UdpClient clientSocket = new UdpClient(clientEndPoint);
clients[remoteEndPoint] = clientSocket;
// Receive data on the connection socket // Send connection message to client
while (true) string connectionMessage = "Connection established on port " + clientEndPoint.Port.ToString();
{ byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage);
byte[] receivedData = clients[remoteEndpoint].Receive(ref remoteEndpoint); serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
string receivedMessage = System.Text.Encoding.ASCII.GetString(receivedData);
Console.WriteLine("Received from " + remoteEndpoint + ": " + receivedMessage); // Start thread to receive data from client
Thread receiveThread = new Thread(ReceiveMessages);
receiveThread.Start(clientSocket);
} }
} }
} }
static void ReceiveMessages(object obj)
{
UdpClient clientSocket = (UdpClient)obj;
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
byte[] receivedData = clientSocket.Receive(ref remoteEndPoint);
string receivedMessage = Encoding.ASCII.GetString(receivedData);
Console.WriteLine("Received from " + remoteEndPoint.ToString() + ": " + receivedMessage);
}
}
}
}
Loading…
Cancel
Save