Comment envoyer et recevoir des données TCP/IP à l’aide de sockets en C#

Les sockets sont de plus en plus utilisés aujourd’hui. Ils fournissent un moyen simple d’échanger des données sur le réseau. Il est utilisé, par exemple, pour échanger des messages entre utilisateurs, pour transférer des fichiers, jouer à des jeux « distribués » etc.
 
 
Les sockets étant basés sur une architecture client/serveur, l’application est composée d’un serveur et d’un client. Le serveur réservera un numéro de port. Ensuite, il écoutera tout requête cliente éventuelle. Le client tentera alors de se connecter au serveur. Une fois la connexion établie, vous pourrez échanger des messages texte. Lorsque vous avez terminé, la connexion sera fermée.
 

Socket côté serveur
using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
  
namespace WayToLearnX {
	public class Server {
		public static void Main(string[] args) 
		{
			// Récupérer le nom de l'hôte
			IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); 
			IPAddress ip = host.AddressList[0]; 
			IPEndPoint endPoint = new IPEndPoint(ip, 9999); 

			// Création du socket TCP/IP
			Socket listener = new Socket(ip.AddressFamily, 
						 SocketType.Stream, ProtocolType.Tcp); 

			try { 
				// Associer une adresse réseau au socket serveur
				listener.Bind(endPoint); 
		  
				// Liste de clients qui voudront se connecter au serveur
				listener.Listen(10); 

				while (true) { 
					Console.WriteLine("En attente connexion...");  
					// accepter la connexion du client
					Socket client = listener.Accept(); 
		  
					// Data buffer 
					byte[] bytes = new Byte[1024]; 
					string data = null; 
		  
					while (true) { 
						int b = client.Receive(bytes);   
						data += Encoding.ASCII.GetString(bytes, 0, b); 
													 
						if (data.IndexOf("<eof>") > -1) 
							break; 
					}
		  
					Console.WriteLine("Texte reçu -> {0} ", data); 
					byte[] message = Encoding.ASCII.GetBytes("Welcome to WayToLearnX"); 
		  
					// Envoyer un message au client 
					client.Send(message); 
		  
					client.Shutdown(SocketShutdown.Both); 
					client.Close(); 
				}
			}catch (Exception e) { 
				Console.WriteLine(e.ToString()); 
			} 
		} 
	}
}

 
Programmation orientée objet en C#

Socket côté client
using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Text; 
  
namespace WayToLearnX { 
	public class Client { 
		public static void Main(string[] args) 
		{ 
			try {
				// Établir une connexion sur le Port 9999 
				IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); 
				IPAddress ip = host.AddressList[0]; 
				IPEndPoint endPoint = new IPEndPoint(ip, 9999); 
		  
				// Créer une socket TCP/IP 
				Socket client = new Socket(ip.AddressFamily, SocketType.Stream, 
				        ProtocolType.Tcp); 
		  
				try { 
					// Connect Socket 
					client.Connect(endPoint); 
		  
					// le message à envoyer au serveur
					byte[] msg = Encoding.ASCII.GetBytes("Hello<EOF>"); 
					int byteSent = client.Send(msg); 
		  
					// Data buffer 
					byte[] messageReceived = new byte[1024]; 
		  
					// Recevoir le message 
					int byteRecv = client.Receive(messageReceived); 
					Console.WriteLine("Message du serveur -> {0}",  
						  Encoding.ASCII.GetString(messageReceived, 0, byteRecv)); 
		  
					client.Shutdown(SocketShutdown.Both); 
					client.Close(); 
				}catch (SocketException e1) {
					Console.WriteLine("SocketException : {0}", e1.ToString()); 
				}catch (ArgumentNullException e2) {
					Console.WriteLine("ArgumentNullException : {0}", e2.ToString());
				}catch (Exception e3) {
					Console.WriteLine("Unexpected exception : {0}", e3.ToString()); 
				}
			}catch (Exception e) {      
				Console.WriteLine(e.ToString()); 
			} 
		} 
	} 
}

 

Exécuter les fichiers sur un terminal ou une invite de commande

Enregistrer les fichiers avec l’extension « .cs ». Exemple : client.cs et server.cs, puis compilez les deux fichiers en exécutant les commandes suivantes:
 
Compilez le serveur:

> csc server.cs

 
Compilez le client:

> csc client.cs
qcm-csharp

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *