- 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