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 while (true)
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
receiveThread.Abort();
foreach (UdpClient clientSocket in clients.Values)
{ {
clientSocket.Close(); IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
} byte[] receivedData = serverSocket.Receive(ref remoteEndPoint);
server.Close(); string message = Encoding.ASCII.GetString(receivedData);
}
static void ServerReceiveMessages(object obj) if (message == "Connect")
{ {
UdpClient serverSocket = (UdpClient)obj; Console.WriteLine("New connection from " + remoteEndPoint.ToString());
while (true) // Assign a unique port to the client
{ IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort++); ;
IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, 0); UdpClient clientSocket = new UdpClient(clientEndPoint);
byte[] data = serverSocket.Receive(ref remoteEndpoint); clients[remoteEndPoint] = clientSocket;
if (!clients.ContainsKey(remoteEndpoint)) // Send connection message to client
{ string connectionMessage = "Connection established on port " + clientEndPoint.Port.ToString();
clients[remoteEndpoint] = new UdpClient(); byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage);
clients[remoteEndpoint].Client.Bind(new IPEndPoint(IPAddress.Any, 31323)); serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
// Start thread to receive data from client
Thread receiveThread = new Thread(ReceiveMessages);
receiveThread.Start(clientSocket);
}
}
} }
string connectionMessage = "Connection established."; static void ReceiveMessages(object obj)
byte[] connectionData = System.Text.Encoding.ASCII.GetBytes(connectionMessage); {
clients[remoteEndpoint].Send(connectionData, connectionData.Length, remoteEndpoint.Address.ToString(), remoteEndpoint.Port); UdpClient clientSocket = (UdpClient)obj;
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
// Receive data on the connection socket
while (true) while (true)
{ {
byte[] receivedData = clients[remoteEndpoint].Receive(ref remoteEndpoint); byte[] receivedData = clientSocket.Receive(ref remoteEndPoint);
string receivedMessage = System.Text.Encoding.ASCII.GetString(receivedData); string receivedMessage = Encoding.ASCII.GetString(receivedData);
Console.WriteLine("Received from " + remoteEndpoint + ": " + receivedMessage); Console.WriteLine("Received from " + remoteEndPoint.ToString() + ": " + receivedMessage);
} }
} }
} }
}

Loading…
Cancel
Save