Server Socket Programming in C#, How To Start
For beginner socket is quite complicated. But it’s not very hard to learn. Basically I’ve learned it within few hours. So I believe it can learn any body. However let’s start.
Socket programming have two part
I. Server
II. Client.
I. Server:
To start server need to follow some steps, these are:
i. First create a IPEndPoint
[e.g. IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, port);]
ii. Create a socket object.
[Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);]
iii. Bind socket with IPEndPoint.
[sock.Bind(ipEnd);]
iv. Place socket in Listen mode (to accept call of client)
[sock.Listen(maxClientReceived);]
v. When any call comes from client Accept that call.
[Socket clientSock = sock.Accept();]
At that position Accept() return a new socket to continue communication with called client. By that socket Client-Server communication continue.
To send some data (in byte array form) to client from server just write
clientSock.send(byteArrayData);
To receive client data just write
int receivedLen= clientSock.Receive(clientData);
Receive() function reads data in byte array form from client socket and writes to ‘clientData’ array, and return integer value how much bytes has received.
I’m giving complete code of a simple server socket below:-
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace beginSocketServer { class Program { static void Main(string[] args) { IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 5656); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); sock.Bind(ipEnd); sock.Listen(100); Socket clientSock = sock.Accept(); byte[] clientData = new byte[1024]; int receivedBytesLen = clientSock.Receive(clientData); string clientDataInString = Encoding.ASCII.GetString(clientData, 0, receivedBytesLen); Console.WriteLine("Received Data {0}", clientDataInString); string clientStr = "Client Data Received"; byte[] sendData = new byte[1024]; sendData= Encoding.ASCII.GetBytes(clientStr); clientSock.Send(sendData); clientSock.Close(); Console.ReadLine(); } } }
To run that server code you don’t need to write client code just open a webbrowser and write (I’ve use Mozilla Firefox or Chrome) :
http://localhost:5656/
Server console output was:
Received Data GET / HTTP/1.1Host: localhost:5656User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png, */*;q=0.5Accept-Language: en-us,en;q=0.5Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-alive
And in web browser output was:
Client Data Received.
Ok, Simple server socket application has done. Next will give simple client socket application for beginner.