using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace Server { class Program { static byte[] _buffer = new byte[1024]; static Socket _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); static List _list = new List(); static void Main(string[] args) { Console.WriteLine("Server's port ?"); string port = Console.ReadLine(); Setup(port); Console.WriteLine("Waiting for connexions..."); Console.WriteLine(GetLocalIP()); Console.ReadLine(); } private static void Setup(string port) { int Port = int.Parse(port); _server.Bind(new IPEndPoint(IPAddress.Any ,Port)); _server.Listen(5); _server.BeginAccept(new AsyncCallback(AcceptCallback), _server); } private static void AcceptCallback(IAsyncResult AR) { Socket socket = _server.EndAccept(AR); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); _list.Add(socket); Console.WriteLine("Client connected !"); socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); } private static void ReceiveCallback(IAsyncResult AR) { Socket socket = (Socket)AR.AsyncState; try { int received = socket.EndReceive(AR); byte[] _buff = new byte[received]; Array.Copy(_buffer, _buff, received); string Text = Encoding.UTF8.GetString(_buff); Console.WriteLine("Text received : " + Text); string sendingtext = "All is OK !"; byte[] _send = null; _send = Encoding.UTF8.GetBytes(sendingtext); socket.BeginSend(_send, 0, _send.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket); socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket); } catch(SocketException) { Console.WriteLine("Client not connected !"); } } private static void SendCallback(IAsyncResult AR) { Socket socket = (Socket)AR.AsyncState; socket.EndSend(AR); } private static string GetLocalIP() { IPHostEntry host; host = Dns.GetHostEntry(Dns.GetHostName()); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { return ip.ToString(); } } return "127.0.0.1"; } } }