Real Time TCP-IP Using C Sharp
Real Time TCP-IP Using C Sharp
Home MFC/C++ C# ASP.NET VB.NET Architect SQL All Topics Help! Articles Message Boards Lounge
All Topics, C#, .NET >> Internet / Network >> Client/Server Development C#
Windows, .NET (.NET 1.0)
Win32, VS (VS.NET2002)
Real Time TCP/IP using C# Dev
By Jibin Pan. Posted : 5 Oct 2001
Updated : 13 Jan 2002
This sample shows the communication techniques between a client and a server application using a Socket class on each side. Views : 144,860
Advanced Search
ANNOUNCEMENTS Search Articles Go!
Sitemap | Add to IE Search
Vista Mobile comp: Print Broken Article? Bookmark Discuss Send to a friend 23 votes for this article.
Win a Samsung UMPC Popularity: 3.93. Rating: 2.89 out of 5.
VB6 Interop Comp
Download server files - 44.7 Kb
Win an Xbox Elite!
Monthly Competition
Introduction
The Real time Application is a sample that shows the communication techniques between a client (TcpClient) and a server
(TcpServer) application using Socket class on each side. The project also demonstrates how to using listview control in the
real time project.
TcpServer.exe showing the use of TCP socket communication in a separate thread. Multiple instances of TcpClient
can talk to the same instance of TcpServer.
TcpClient.exe also uses a separate thread to read data from Socket then update the listview control in a form.
1. TcpServer listens on port 8002 and spawns a thread to waiting clients to connect.
public Form1()
{
// Required for Windows Form Designer support
//
InitializeComponent();
...
}
2. TcpClient connect to TcpSrv and sends Client information data packet to TcpServer then spawns a thread, which
http://www.codeproject.com/cs/internet/realtimeapp.asp 6/6/2007
Real Time TCP/IP using C# - The Code Project - Internet / Network Page 2 of 6
Try
{
s.Connect(EPhost);
if (s.Connected)
{
Byte[] bBuf;
string buf;
buf = String.Format("{0}:{1}", myDlg.UserName,
myDlg.PassWord);
bBuf=ASCII.GetBytes(buf);
s.Send(bBuf, 0 , bBuf.Length,0);
t = new Thread(new ThreadStart(StartRecieve));
t.Start();
sbar.Text="Ready to recieve data";
}
}
catch (Exception e1)
{
MessageBox.Show(e1.ToString());
}
}
}
private void StartRecieve()
{
MethodInvoker miv = new MethodInvoker(this.UpdateListView);
while (true)
{
Byte[] receive = new Byte[38] ;
Try
{
string tmp=null;
// Receive will block until data coming
// ret is 0 or Exception happen when Socket connection is
// broken
int ret = s.Receive(receive, receive.Length, 0);
if (ret>0)
{
tmp = System.Text.Encoding.ASCII.GetString(receive);
if(tmp.Length > 0)
{
isu.symbol= Mid(tmp, 0, 4);
isu.bid = Mid(tmp, 4, 5);
isu.offer = Mid(tmp, 9, 5);
isu.volume = Mid(tmp, 16, tmp.Length-16);
this.BeginInvoke(miv);
Thread.Sleep(300);
// block until finish the
// UpdateListview’s job JobDone.WaitOne();
}
}
}
catch (Exception e)
{
if( !s.Connected )
{
break;
}
}
}
t.Abort();
}
3. TcpServer accepts the connection and saves the socket instance into a Hashtable instance then spawns a thread to
handle the socket communication and show the client information in the top listview control.
Collapse
http://www.codeproject.com/cs/internet/realtimeapp.asp 6/6/2007
Real Time TCP/IP using C# - The Code Project - Internet / Network Page 3 of 6
}
// it is used to keep connected Sockets
socketHolder.Add(connectId, sckt);
Thread td = new Thread(new ThreadStart(ReadSocket));
// it is used to keep the active thread
threadHolder.Add(connectId, td);
td.Start();
}
}
}
// follow function handle the communication from the clients and close the
// socket and the thread when the socket connection is down
public void ReadSocket()
{
// the connectId is keeping changed with new connection added. it can't
// be used to keep the real connectId, the local variable realId will
// keep the value when the thread started.
long realId = connectId;
int ind=-1;
Socket s = (Socket)socketHolder[realId];
while (true)
{
if(s.Connected)
{
Byte[] receive = new Byte[37] ;
Try
{
// Receive will block until data coming
// ret is 0 or Exception happen when Socket connection
// is broken
int ret=s.Receive(receive,receive.Length,0);
if (ret>0)
{
string tmp = null;
tmp=System.Text.Encoding.ASCII.GetString(receive);
if(tmp.Length > 0)
{
DateTime now1=DateTime.Now;
String strDate;
strDate = now1.ToShortDateString() + " "
+ now1.ToLongTimeString();
……………
}
}
else
{
this.listView2.Items[ind].ImageIndex=1;
keepUser=false;
break;
}
}
catch (Exception e)
{
if( !s.Connected )
{
this.listView2.Items[ind].ImageIndex=1;
keepUser=false;
break;
}
}
}
}
CloseTheThread(realId);
}
private void CloseTheThread(long realId)
{
socketHolder.Remove(realId);
if(!keepUser) userHolder.Remove(realId);
Thread thd = (Thread)threadHolder[realId];
threadHolder.Remove(realId);
thd.Abort();
}
4. Click Load Data Menu to spawns a thread to load the information from a file then sends the information to all the
clients that were connected to the TcpServer and update its own listview.
In both TcpServer and TcpClient, they get the data from a working thread, and then update the Listview control in
the Main thread. Here use the MethodInvoker to work it out.
Collapse
http://www.codeproject.com/cs/internet/realtimeapp.asp 6/6/2007
Real Time TCP/IP using C# - The Code Project - Internet / Network Page 4 of 6
{
MethodInvoker mi = new MethodInvoker(this.UpdateListView);
string tmp = null;
StreamReader sr = File.OpenText("Issue.txt");
while((tmp = sr.ReadLine()) !=null )
{
if (tmp =="")
break;
SendDataToAllClient(tmp);
this.BeginInvoke(mi);
Thread.Sleep(200);
JobDone.WaitOne();
}
sr.Close();
fThd.Abort();
}
private void SendDataToAllClient(string str)
{
foreach (Socket s in socketHolder.Values)
{
if(s.Connected)
{
Byte[] byteDateLine=ASCII.GetBytes(str.ToCharArray());
s.Send(byteDateLine, byteDateLine.Length, 0);
}
}
}
Following function demonstrate how to dynamically set BackColor and Forecolor properties of the Listview in
TcpClient.
Collapse
this.listView1.Items.Add(newItem);
int i=this.listView1.Items.IndexOf(newItem);
setRowColor(i, System.Drawing.Color.FromArgb(255, 255, 175));
setColColorHL(i, 0, System.Drawing.Color.FromArgb(128,0,0));
setColColorHL(i, 1, System.Drawing.Color.FromArgb(128,0,0));
this.listView1.Update();
Thread.Sleep(300);
setColColor(i, 0, System.Drawing.Color.FromArgb(255, 255,175));
setColColor(i, 1, System.Drawing.Color.FromArgb(255, 255, 175));
}
else
{
this.listView1.Items[ind].Text = isu.symbol.ToString();
this.listView1.Items[ind].SubItems[1].Text = (isu.bid);
this.listView1.Items[ind].SubItems[2].Text = (isu.offer);
this.listView1.Items[ind].SubItems[3].Text = (isu.volume);
setColColorHL(ind, 0, System.Drawing.Color.FromArgb(128,0,0));
setColColorHL(ind, 1, System.Drawing.Color.FromArgb(128,0,0));
this.listView1.Update();
Thread.Sleep(300);
setColColor(ind, 0, System.Drawing.Color.FromArgb(255,255,175));
setColColor(ind, 1, System.Drawing.Color.FromArgb(255,255,175));
}
JobDone.Set();
}
http://www.codeproject.com/cs/internet/realtimeapp.asp 6/6/2007
Real Time TCP/IP using C# - The Code Project - Internet / Network Page 5 of 6
if (colNum==0)
{
this.listView1.Items[rowNum].SubItems[colNum].ForeColor =
System.Drawing.Color.FromArgb(128, 0, 64);
this.listView1.Items[rowNum].SubItems[colNum].BackColor =
System.Drawing.Color.FromArgb(197, 197, 182);
}
else
this.listView1.Items[rowNum].SubItems[colNum].ForeColor =
System.Drawing.Color.FromArgb(20, 20,20);
}
3. On the TcpClient side, Click Menu connect; enter the server machine name where TcpServer is running. Enter user
name and password in the edit box. Click Ok.
4. When you see the client in the TcpServer top listview, click Load Data Menu on the TcpServer, and then you will see
the real time data in TcpServer and TcpClient.
Note: Make sure that the Data file, Issue.txt, is in the same directory as TcpSvr.exe.
If you have any comments, I would love to hear about it. You can reach me at Jibin Pan.
Jibin Pan is VC++, C programmer at Interactive Edge Corp. Xtend Communications Corp. MoneyLine Corp in New York
City since 1994 and has Master degree at computer science.
History
Jibin Pan
http://www.codeproject.com/cs/internet/realtimeapp.asp 6/6/2007
Real Time TCP/IP using C# - The Code Project - Internet / Network Page 6 of 6
Re: Updated Sample to get ... Chuck Duncan 15:43 7 Aug '06
Re: Thank you for this example Chris A.R. 23:22 21 Mar '04
Re: Thank you for this example Christian Uhlig 4:01 8 Apr '04
Hi, I have read your thread, and....a prb steve_cluj 1:57 21 Jun '02
Re: Hi, I have read your thread, and....a prb AK 19:56 23 Dec '02
Last Visit: 11:22 Wednesday 6th June, 2007 First Prev Next
General comment News / Info Question Answer Joke / Game Admin message
The Ultimate Toolbox • ASP Alliance • Developer Fusion • Developersdex • DevGuru • Programmers Heaven • Planet Source Code • Tek-Tips Forums •
http://www.codeproject.com/cs/internet/realtimeapp.asp 6/6/2007