Synchronous Client Server Application in C#
Join the DZone community and get the full member experience.
Join For FreeTCP Based Server
Server.cs
Client.cs
- Establish the local end point for the socket
- Open a socket using Socket()
- Name the socket using Bind()
- Listen for incoming connections using Listen(), parameter inside the method specifies the maximu number of pending connections
- Accept client connections using Accept(), a new socket is created here but the original socket keeps listen
- Send, Receive data using Send() and Receive()
- Close Socket using Close()
Server.cs
using System; using System.Net.Sockets; using System.Net; using System.Text; public class SocketServer { public static void Main(string [] args) { // establish the local end point for the socket IPHostEntry ipHost = Dns.Resolve("localhost"); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); // create a Tcp/Ip Socket Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // bind the socket to the local endpoint and // listen to the incoming sockets try { sListener.Bind(ipEndPoint); sListener.Listen(10); // Start listening for connections while (true) { Console.WriteLine("Waiting for a connection on port {0}",ipEndPoint); // program is suspended while waiting for an incoming connection Socket handler = sListener.Accept(); string data = null; // we got the client attempting to connect while(true) { byte[] bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, bytesRec); if (data.IndexOf("<theend>") > -1) { break; } } // show the data on the console Console.WriteLine("Text Received: {0}",data); string theReply = "Thank you for those " + data.Length.ToString() + " characters..."; byte[] msg = Encoding.ASCII.GetBytes(theReply); handler.Send(msg); handler.Shutdown(SocketShutdown.Both); handler.Close(); } } catch(Exception e) { Console.WriteLine(e.ToString()); } } // end of Main }TCP Based Client
- Establish a remote endpoint
- Open a socket using Socket()
- Connect to the remote host using Connect
- Send, receive data using Send() and Receive()
- Close Socket using Close()
Client.cs
using System; using Systern.Net.Sockets; using Systern.Net; using Systern.Text; public class SocketClient { public static void Main(string [] args) { // data buffer for incoming data byte[] bytes = new byte[1024]; // connect to a Remote device try { // Establish the remote end point for the socket IPHostEntry ipHost = Dns.Resolve("127.0.0.1"); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); Socket sender = new Socket(AddressFamily.Internetwork, SocketType.Stream, ProtocolType.Tcp); // Connect the socket to the remote endpoint sender.Connect(ipEndPoint); Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString()); string theMessage = "This is a test"; byte[] msg = Encoding.ASCII.GetBytes(theMessage+"<theend>"); // Send the data through the socket int bytesSent = sender.Send(msg); // Receive the response from the remote device int bytesRec = sender.Receive(bytes); Console.WriteLine("The Server says : {0}", Encoding.ASCII.GetString(bytes,0, bytesRec)); // Release the socket sender.Shutdown(SocketShutdown.Both); sender.Close(); } catch(Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } } }Fllowing image shows how client and server send and receive data
application
Published at DZone with permission of Pavithra Gunasekara, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments