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.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome to Pong Multiplayer - Client");
Console.WriteLine("Welcome to LeapHit Multiplayer - Client");
StartClient();
}
static void StartClient()
{
IPEndPoint endPoint = 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);
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3131);
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:");
string data = Console.ReadLine();
byte[] dataToSend = System.Text.Encoding.ASCII.GetBytes(data);
client.Send(dataToSend, dataToSend.Length, endPoint);
Console.Write("Enter message to send (or 'exit' to quit): ");
message = Console.ReadLine();
byte[] data = Encoding.ASCII.GetBytes(message);
client.Send(data, data.Length, serverEndPoint);
}
// Close client
client.Close();
}
}
}

@ -1,12 +1,14 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Text;
using System.Threading;
class Program
{
static Dictionary<IPEndPoint, UdpClient> clients = new Dictionary<IPEndPoint, UdpClient>();
static int nextPort = 3132;
static void Main(string[] args)
{
@ -16,64 +18,47 @@ class Program
static void StartServer()
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3131);
UdpClient server = new UdpClient(endPoint);
Thread receiveThread = new Thread(ServerReceiveMessages);
receiveThread.Start(server);
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Any, 3131);
UdpClient serverSocket = new UdpClient(serverEndPoint);
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)
{
IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = serverSocket.Receive(ref remoteEndpoint);
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] receivedData = serverSocket.Receive(ref remoteEndPoint);
string message = Encoding.ASCII.GetString(receivedData);
if (!clients.ContainsKey(remoteEndpoint))
if (message == "Connect")
{
clients[remoteEndpoint] = new UdpClient();
clients[remoteEndpoint].Client.Bind(new IPEndPoint(IPAddress.Any, 31323));
}
Console.WriteLine("New connection from " + remoteEndPoint.ToString());
string connectionMessage = "Connection established.";
byte[] connectionData = System.Text.Encoding.ASCII.GetBytes(connectionMessage);
clients[remoteEndpoint].Send(connectionData, connectionData.Length, remoteEndpoint.Address.ToString(), remoteEndpoint.Port);
// Assign a unique port to the client
IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, nextPort++); ;
UdpClient clientSocket = new UdpClient(clientEndPoint);
clients[remoteEndPoint] = clientSocket;
// Receive data on the connection socket
while (true)
{
byte[] receivedData = clients[remoteEndpoint].Receive(ref remoteEndpoint);
string receivedMessage = System.Text.Encoding.ASCII.GetString(receivedData);
Console.WriteLine("Received from " + remoteEndpoint + ": " + receivedMessage);
// Send connection message to client
string connectionMessage = "Connection established on port " + clientEndPoint.Port.ToString();
byte[] connectionData = Encoding.ASCII.GetBytes(connectionMessage);
serverSocket.Send(connectionData, connectionData.Length, remoteEndPoint);
// 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