Sockets in C#
Introduction
Sockets are endpoints for communication between two machines. Using sockets, programs can communicate across a network. In C#, sockets are extensively used for network programming. This tutorial will guide you through the basics of socket programming in C#.
Understanding Sockets
A socket is one end of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the Transmission Control Protocol (TCP) layer can identify the application that data is destined to. Here are some basic terms and concepts:
- IP Address: A unique string of numbers separated by periods that identifies each computer using the Internet Protocol to communicate over a network.
- Port Number: A port number is a 16-bit unsigned integer ranging from 0 to 65535. Ports are used to distinguish different types of traffic.
- TCP: Transmission Control Protocol is a standard that defines how to establish and maintain a network conversation through which applications can exchange data.
- UDP: User Datagram Protocol is a simpler message-based connectionless protocol.
Creating a Simple Server
Let's start by creating a simple server socket in C#. The server will listen for incoming connections and respond to them.
using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main() { // Define the endpoint and port IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 11000); // Create a Socket Socket listener = new Socket(IPAddress.Any.AddressFamily, SocketType.Stream, ProtocolType.Tcp); try { // Bind the socket to the endpoint listener.Bind(localEndPoint); // Start listening for connections listener.Listen(10); Console.WriteLine("Waiting for a connection..."); Socket handler = listener.Accept(); // Incoming data from the client string data = null; byte[] bytes = new Byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes, 0, bytesRec); // Show the data on the console Console.WriteLine("Text received : {0}", data); // Echo the data back to the client byte[] msg = Encoding.ASCII.GetBytes(data); handler.Send(msg); handler.Shutdown(SocketShutdown.Both); handler.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } }
Creating a Simple Client
Now, let’s create a client that will connect to the server and send a message.
using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main() { byte[] bytes = new byte[1024]; try { // Connect to a remote device IPHostEntry host = Dns.GetHostEntry("localhost"); IPAddress ipAddress = host.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAddress, 11000); // Create a TCP/IP socket Socket sender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Connect to the remote endpoint sender.Connect(remoteEP); Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString()); // Encode the data string into a byte array byte[] msg = Encoding.ASCII.GetBytes("Hello Server!"); // 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("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec)); // Release the socket sender.Shutdown(SocketShutdown.Both); sender.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } }
Running the Server and Client
To see the server and client in action, follow these steps:
- Run the server program first. It will start listening for incoming connections.
- Run the client program. It will connect to the server and send a message.
- The server will receive the message and echo it back to the client.
- The client will display the echoed message from the server.
Conclusion
In this tutorial, we covered the basics of socket programming in C#. We created a simple server that listens for incoming connections and a client that connects to the server and sends a message. Socket programming is a powerful tool for network communication and is used in various applications, from web servers to chat applications.