There is two examples of code.
Example 1. Send and Receive within the same process. Put this code in a
console app called SendAndReceive and run the code.
using System;
using System.Collecti ons.Generic;
using System.Net;
using System.Net.Sock ets;
using System.Runtime. Serialization.F ormatters.Binar y;
using System.Text;
using System.Threadin g;
namespace ConsoleApplicat ion3
{
class Program
{
static void Main(string[] args)
{
SocketReceive sr = new SocketReceive() ;
Thread tsr = new Thread(new ThreadStart(sr. Process));
tsr.IsBackgroun d = true;
tsr.Start();
SocketSend ss = new SocketSend();
Thread tss = new Thread(new ThreadStart(ss. Process));
tss.IsBackgroun d = true;
tss.Start();
while (tsr.IsAlive || tss.IsAlive)
{
Thread.Sleep(10 0);
}
}
}
class SocketSend
{
public void Process()
{
// Register the socket
IPEndPoint endPoint = new
IPEndPoint(Dns. GetHostAddresse s(Dns.GetHostNa me())[0], 7001);
Socket socket = new Socket(AddressF amily.InterNetw ork,
SocketType.Stre am,
ProtocolType.IP );
try
{
int max = 600000;
socket.Connect( endPoint);
long start = start = DateTime.Now.Ti cks; ;
long time1 = 0;
int completed = 0;
for (int i = 0; i <= max; i++)
{
if ((i % 1000) == 0)
Console.WriteLi ne("Sending {0}", i);
SendLiteMessage (socket, i);
completed++;
time1 = DateTime.Now.Ti cks;
if (((time1 - start) / 10000) 1000)
{
Console.WriteLi ne("Sent {0} in {1}(ms)", completed,
((time1 - start) / 10000));
start = DateTime.Now.Ti cks;
completed = 0;
}
}
}
catch (Exception ex)
{
Console.WriteLi ne(ex.Message);
}
finally
{
socket.Shutdown (SocketShutdown .Both);
socket.Close();
}
}
private void SendLiteMessage (Socket socket, int count)
{
byte[] bas = new byte[2048];
bas[0] = (byte)count;
long start = start = DateTime.Now.Ti cks; ;
socket.Send(bas , SocketFlags.Non e);
long time1 = DateTime.Now.Ti cks;
//Console.WriteLi ne("Socket Send took {0}", (time1 - start));
}
}
class SocketReceive
{
private object ReceiveMessageL ite(NetworkStre am ns, int count)
{
byte[] bas = new byte[2048];
int read = ns.Read(bas, 0, bas.Length);
return bas;
}
public void Process()
{
IPEndPoint endPoint = new
IPEndPoint(Dns. GetHostAddresse s(Dns.GetHostNa me())[0], 7001);
try
{
Console.WriteLi ne("Waiting for Sender...");
TcpListener listener = new TcpListener(end Point.Address,
7001);
listener.Start( );
TcpClient client = listener.Accept TcpClient();
client.ReceiveB ufferSize = 32768;
NetworkStream ns = client.GetStrea m();
long start = start = DateTime.Now.Ti cks; ;
long time1 = 0;
int completed = 0;
for (int i = 0; i < 600000; i++)
{
if ((i % 1000) == 0)
Console.WriteLi ne("Receiving {0}", i);
object obj = ReceiveMessageL ite(ns, i);
completed++;
time1 = DateTime.Now.Ti cks;
if (((time1 - start) / 10000) 1000)
{
Console.WriteLi ne("Received {0} in {1}(ms)",
completed, ((time1 - start) / 10000));
start = DateTime.Now.Ti cks;
completed = 0;
}
}
}
catch (Exception ex)
{
Console.WriteLi ne(ex.Message);
}
finally
{
}
}
}
}
Example 2. Put this code in a console app called Receive
using System;
using System.Collecti ons.Generic;
using System.Net;
using System.Net.Sock ets;
using System.Runtime. Serialization.F ormatters.Binar y;
using System.Text;
using System.Threadin g;
namespace ConsoleApplicat ion3
{
class Program
{
static void Main(string[] args)
{
SocketReceive sr = new SocketReceive() ;
Thread tsr = new Thread(new ThreadStart(sr. Process));
tsr.IsBackgroun d = true;
tsr.Start();
while (tsr.IsAlive)
{
Thread.Sleep(10 0);
}
}
}
class SocketReceive
{
private object ReceiveMessageL ite(NetworkStre am ns, int count)
{
byte[] bas = new byte[2048];
int read = ns.Read(bas, 0, bas.Length);
return bas;
}
public void Process()
{
IPEndPoint endPoint = new
IPEndPoint(Dns. GetHostAddresse s(Dns.GetHostNa me())[0], 7001);
try
{
Console.WriteLi ne("Waiting for Sender...");
TcpListener listener = new TcpListener(end Point.Address,
7001);
listener.Start( );
TcpClient client = listener.Accept TcpClient();
client.ReceiveB ufferSize = 32768;
NetworkStream ns = client.GetStrea m();
long start = start = DateTime.Now.Ti cks; ;
long time1 = 0;
int completed = 0;
for (int i = 0; i < 600000; i++)
{
if ((i % 1000) == 0)
Console.WriteLi ne("Receiving {0}", i);
object obj = ReceiveMessageL ite(ns, i);
completed++;
time1 = DateTime.Now.Ti cks;
if (((time1 - start) / 10000) 1000)
{
Console.WriteLi ne("Received {0} in {1}(ms)",
completed, ((time1 - start) / 10000));
start = DateTime.Now.Ti cks;
completed = 0;
}
}
}
catch (Exception ex)
{
Console.WriteLi ne(ex.Message);
}
finally
{
}
}
}
}
Example 2. Put this code in a console app called Send.
using System;
using System.Collecti ons.Generic;
using System.Net;
using System.Net.Sock ets;
using System.Runtime. Serialization.F ormatters.Binar y;
using System.Text;
using System.Threadin g;
namespace ConsoleApplicat ion3
{
class Program
{
static void Main(string[] args)
{
SocketSend ss = new SocketSend();
Thread tss = new Thread(new ThreadStart(ss. Process));
tss.IsBackgroun d = true;
tss.Start();
while (tss.IsAlive)
{
Thread.Sleep(10 0);
}
}
}
class SocketSend
{
public void Process()
{
// Register the socket
IPEndPoint endPoint = new
IPEndPoint(Dns. GetHostAddresse s(Dns.GetHostNa me())[0], 7001);
Socket socket = new Socket(AddressF amily.InterNetw ork,
SocketType.Stre am,
ProtocolType.IP );
try
{
int max = 600000;
socket.Connect( endPoint);
long start = start = DateTime.Now.Ti cks; ;
long time1 = 0;
int completed = 0;
for (int i = 0; i <= max; i++)
{
if ((i % 1000) == 0)
Console.WriteLi ne("Sending {0}", i);
SendLiteMessage (socket, i);
completed++;
time1 = DateTime.Now.Ti cks;
if (((time1 - start) / 10000) 1000)
{
Console.WriteLi ne("Sent {0} in {1}(ms)", completed,
((time1 - start) / 10000));
start = DateTime.Now.Ti cks;
completed = 0;
}
}
}
catch (Exception ex)
{
Console.WriteLi ne(ex.Message);
}
finally
{
socket.Shutdown (SocketShutdown .Both);
socket.Close();
}
}
private void SendLiteMessage (Socket socket, int count)
{
byte[] bas = new byte[2048];
bas[0] = (byte)count;
long start = start = DateTime.Now.Ti cks; ;
socket.Send(bas , SocketFlags.Non e);
long time1 = DateTime.Now.Ti cks;
//Console.WriteLi ne("Socket Send took {0}", (time1 - start));
}
}
}
Run Receive and then Send. Compare the received about with Example 1 you
will see example 2 will be quicker.
Let me know your outcome.
Thanks,