- 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
No comments :
Post a Comment