Simple TCP/IP Server Code

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(New page: Here is the C# code for the server binary. Create a new Windows Forms applicaiton and add this code to the project. The frmMain is the main form for the application. This code is a modifie...)
 
m (Text replace - "</csharp>" to "</syntaxhighlight>")
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
*[[Simple TCP/IP Client - Server]] - Return to TCP/IP Client - Server Page
 +
 
Here is the C# code for the server binary.
 
Here is the C# code for the server binary.
Create a new Windows Forms applicaiton and add this code to the project.
+
Create a new Windows Forms application and add this code to the project.
 
The frmMain is the main form for the application.
 
The frmMain is the main form for the application.
 
This code is a modified version of the 101 C# example for the advanced TCP/IP server piece from MSDN.
 
This code is a modified version of the 101 C# example for the advanced TCP/IP server piece from MSDN.
Line 6: Line 8:
  
 
frmMain.cs code:
 
frmMain.cs code:
<c>
+
<syntaxhighlight lang="csharp">
 
// Initial tcp/ip server component taken from MSDN 101 examples, advanced networking in C#
 
// Initial tcp/ip server component taken from MSDN 101 examples, advanced networking in C#
 
// Modified to display a little more information and to ignore invalid packets
 
// Modified to display a little more information and to ignore invalid packets
Line 669: Line 671:
 
}
 
}
  
</c>
+
</syntaxhighlight>
  
  
Line 676: Line 678:
  
 
UserConnection.cs Code:
 
UserConnection.cs Code:
<c>
+
<syntaxhighlight lang="csharp">
 
using System;
 
using System;
 
using System.Net.Sockets;
 
using System.Net.Sockets;
Line 760: Line 762:
 
}
 
}
  
</c>
+
</syntaxhighlight>

Latest revision as of 20:47, 10 January 2012

Here is the C# code for the server binary. Create a new Windows Forms application and add this code to the project. The frmMain is the main form for the application. This code is a modified version of the 101 C# example for the advanced TCP/IP server piece from MSDN. (Freely available)

frmMain.cs code:

// Initial tcp/ip server component taken from MSDN 101 examples, advanced networking in C#
// Modified to display a little more information and to ignore invalid packets
// Most of the server piece is still intact for simple chat
// This is for Proof of Concept ONLY 
// This is to show how to make a simple game server
// At this point, all messages received come across with a CHAT and is parsed
 
using System;
using System.Collections;
using System.Threading;
using System.Windows.Forms;
using System.Net.Sockets;
 
public class frmMain : System.Windows.Forms.Form 
{
 
#region " Windows Form Designer generated code "
 
	/// <summary>
	/// The main entry point for the application.
	/// </summary>
	[STAThread]
	static void Main() 
	{
		Application.Run(new frmMain());
	}
 
    public frmMain() 
	{
        //This call is required by the Windows Form Designer.
        InitializeComponent();
        //Add any initialization after the InitializeComponent() call
        // So that we only need to set the title of the application once,
        // we use the AssemblyInfo class (defined in the AssemblyInfo.cs file)
        // to read the AssemblyTitle attribute.
        AssemblyInfo ainfo = new AssemblyInfo();
        this.Text = ainfo.Title;
        this.mnuAbout.Text = string.Format("&About {0} ...", ainfo.Title);
    }
 
    //Form overrides dispose to clean up the component list.
    protected override void Dispose(bool disposing) {
        if (disposing) {
            if (components != null) {
                components.Dispose();
            }
        }
        base.Dispose(disposing);
    }
    //Required by the Windows Form Designer
    private System.ComponentModel.IContainer components = null;
    //NOTE: The following procedure is required by the Windows Form Designer
    //It can be modified using the Windows Form Designer.  
    //Do not modify it using the code editor.
    private System.Windows.Forms.MainMenu mnuMain;
 
    private System.Windows.Forms.MenuItem mnuFile;
 
    private System.Windows.Forms.MenuItem mnuExit;
 
    private System.Windows.Forms.MenuItem mnuHelp;
 
    private System.Windows.Forms.MenuItem mnuAbout;
 
    private System.Windows.Forms.ListBox lstStatus;
 
    private System.Windows.Forms.Button btnBroadcast;
 
    private System.Windows.Forms.TextBox txtBroadcast;
 
    private System.Windows.Forms.Label lblInstructions;
	private System.Windows.Forms.ListBox lstPlayers;
	private System.Windows.Forms.Label label2;
	private System.Windows.Forms.Button btnPM;
	private System.Windows.Forms.Button btnKick;
	private System.Windows.Forms.TextBox textBox1;
	private System.Windows.Forms.Label label3;
 
    private System.Windows.Forms.Label Label1;
 
    private void InitializeComponent() {
		System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmMain));
		this.mnuMain = new System.Windows.Forms.MainMenu();
		this.mnuFile = new System.Windows.Forms.MenuItem();
		this.mnuExit = new System.Windows.Forms.MenuItem();
		this.mnuHelp = new System.Windows.Forms.MenuItem();
		this.mnuAbout = new System.Windows.Forms.MenuItem();
		this.lstStatus = new System.Windows.Forms.ListBox();
		this.txtBroadcast = new System.Windows.Forms.TextBox();
		this.btnBroadcast = new System.Windows.Forms.Button();
		this.lblInstructions = new System.Windows.Forms.Label();
		this.Label1 = new System.Windows.Forms.Label();
		this.lstPlayers = new System.Windows.Forms.ListBox();
		this.label2 = new System.Windows.Forms.Label();
		this.btnPM = new System.Windows.Forms.Button();
		this.btnKick = new System.Windows.Forms.Button();
		this.textBox1 = new System.Windows.Forms.TextBox();
		this.label3 = new System.Windows.Forms.Label();
		this.SuspendLayout();
		// 
		// mnuMain
		// 
		this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																				this.mnuFile,
																				this.mnuHelp});
		this.mnuMain.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("mnuMain.RightToLeft")));
		// 
		// mnuFile
		// 
		this.mnuFile.Enabled = ((bool)(resources.GetObject("mnuFile.Enabled")));
		this.mnuFile.Index = 0;
		this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																				this.mnuExit});
		this.mnuFile.Shortcut = ((System.Windows.Forms.Shortcut)(resources.GetObject("mnuFile.Shortcut")));
		this.mnuFile.ShowShortcut = ((bool)(resources.GetObject("mnuFile.ShowShortcut")));
		this.mnuFile.Text = resources.GetString("mnuFile.Text");
		this.mnuFile.Visible = ((bool)(resources.GetObject("mnuFile.Visible")));
		// 
		// mnuExit
		// 
		this.mnuExit.Enabled = ((bool)(resources.GetObject("mnuExit.Enabled")));
		this.mnuExit.Index = 0;
		this.mnuExit.Shortcut = ((System.Windows.Forms.Shortcut)(resources.GetObject("mnuExit.Shortcut")));
		this.mnuExit.ShowShortcut = ((bool)(resources.GetObject("mnuExit.ShowShortcut")));
		this.mnuExit.Text = resources.GetString("mnuExit.Text");
		this.mnuExit.Visible = ((bool)(resources.GetObject("mnuExit.Visible")));
		this.mnuExit.Click += new System.EventHandler(this.mnuExit_Click);
		// 
		// mnuHelp
		// 
		this.mnuHelp.Enabled = ((bool)(resources.GetObject("mnuHelp.Enabled")));
		this.mnuHelp.Index = 1;
		this.mnuHelp.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																				this.mnuAbout});
		this.mnuHelp.Shortcut = ((System.Windows.Forms.Shortcut)(resources.GetObject("mnuHelp.Shortcut")));
		this.mnuHelp.ShowShortcut = ((bool)(resources.GetObject("mnuHelp.ShowShortcut")));
		this.mnuHelp.Text = resources.GetString("mnuHelp.Text");
		this.mnuHelp.Visible = ((bool)(resources.GetObject("mnuHelp.Visible")));
		// 
		// mnuAbout
		// 
		this.mnuAbout.Enabled = ((bool)(resources.GetObject("mnuAbout.Enabled")));
		this.mnuAbout.Index = 0;
		this.mnuAbout.Shortcut = ((System.Windows.Forms.Shortcut)(resources.GetObject("mnuAbout.Shortcut")));
		this.mnuAbout.ShowShortcut = ((bool)(resources.GetObject("mnuAbout.ShowShortcut")));
		this.mnuAbout.Text = resources.GetString("mnuAbout.Text");
		this.mnuAbout.Visible = ((bool)(resources.GetObject("mnuAbout.Visible")));
		this.mnuAbout.Click += new System.EventHandler(this.mnuAbout_Click);
		// 
		// lstStatus
		// 
		this.lstStatus.AccessibleDescription = resources.GetString("lstStatus.AccessibleDescription");
		this.lstStatus.AccessibleName = resources.GetString("lstStatus.AccessibleName");
		this.lstStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("lstStatus.Anchor")));
		this.lstStatus.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lstStatus.BackgroundImage")));
		this.lstStatus.ColumnWidth = ((int)(resources.GetObject("lstStatus.ColumnWidth")));
		this.lstStatus.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("lstStatus.Dock")));
		this.lstStatus.Enabled = ((bool)(resources.GetObject("lstStatus.Enabled")));
		this.lstStatus.Font = ((System.Drawing.Font)(resources.GetObject("lstStatus.Font")));
		this.lstStatus.HorizontalExtent = ((int)(resources.GetObject("lstStatus.HorizontalExtent")));
		this.lstStatus.HorizontalScrollbar = ((bool)(resources.GetObject("lstStatus.HorizontalScrollbar")));
		this.lstStatus.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("lstStatus.ImeMode")));
		this.lstStatus.IntegralHeight = ((bool)(resources.GetObject("lstStatus.IntegralHeight")));
		this.lstStatus.ItemHeight = ((int)(resources.GetObject("lstStatus.ItemHeight")));
		this.lstStatus.Location = ((System.Drawing.Point)(resources.GetObject("lstStatus.Location")));
		this.lstStatus.Name = "lstStatus";
		this.lstStatus.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("lstStatus.RightToLeft")));
		this.lstStatus.ScrollAlwaysVisible = ((bool)(resources.GetObject("lstStatus.ScrollAlwaysVisible")));
		this.lstStatus.Size = ((System.Drawing.Size)(resources.GetObject("lstStatus.Size")));
		this.lstStatus.TabIndex = ((int)(resources.GetObject("lstStatus.TabIndex")));
		this.lstStatus.Visible = ((bool)(resources.GetObject("lstStatus.Visible")));
		// 
		// txtBroadcast
		// 
		this.txtBroadcast.AccessibleDescription = resources.GetString("txtBroadcast.AccessibleDescription");
		this.txtBroadcast.AccessibleName = resources.GetString("txtBroadcast.AccessibleName");
		this.txtBroadcast.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("txtBroadcast.Anchor")));
		this.txtBroadcast.AutoSize = ((bool)(resources.GetObject("txtBroadcast.AutoSize")));
		this.txtBroadcast.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("txtBroadcast.BackgroundImage")));
		this.txtBroadcast.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("txtBroadcast.Dock")));
		this.txtBroadcast.Enabled = ((bool)(resources.GetObject("txtBroadcast.Enabled")));
		this.txtBroadcast.Font = ((System.Drawing.Font)(resources.GetObject("txtBroadcast.Font")));
		this.txtBroadcast.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("txtBroadcast.ImeMode")));
		this.txtBroadcast.Location = ((System.Drawing.Point)(resources.GetObject("txtBroadcast.Location")));
		this.txtBroadcast.MaxLength = ((int)(resources.GetObject("txtBroadcast.MaxLength")));
		this.txtBroadcast.Multiline = ((bool)(resources.GetObject("txtBroadcast.Multiline")));
		this.txtBroadcast.Name = "txtBroadcast";
		this.txtBroadcast.PasswordChar = ((char)(resources.GetObject("txtBroadcast.PasswordChar")));
		this.txtBroadcast.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("txtBroadcast.RightToLeft")));
		this.txtBroadcast.ScrollBars = ((System.Windows.Forms.ScrollBars)(resources.GetObject("txtBroadcast.ScrollBars")));
		this.txtBroadcast.Size = ((System.Drawing.Size)(resources.GetObject("txtBroadcast.Size")));
		this.txtBroadcast.TabIndex = ((int)(resources.GetObject("txtBroadcast.TabIndex")));
		this.txtBroadcast.Text = resources.GetString("txtBroadcast.Text");
		this.txtBroadcast.TextAlign = ((System.Windows.Forms.HorizontalAlignment)(resources.GetObject("txtBroadcast.TextAlign")));
		this.txtBroadcast.Visible = ((bool)(resources.GetObject("txtBroadcast.Visible")));
		this.txtBroadcast.WordWrap = ((bool)(resources.GetObject("txtBroadcast.WordWrap")));
		// 
		// btnBroadcast
		// 
		this.btnBroadcast.AccessibleDescription = resources.GetString("btnBroadcast.AccessibleDescription");
		this.btnBroadcast.AccessibleName = resources.GetString("btnBroadcast.AccessibleName");
		this.btnBroadcast.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("btnBroadcast.Anchor")));
		this.btnBroadcast.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnBroadcast.BackgroundImage")));
		this.btnBroadcast.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("btnBroadcast.Dock")));
		this.btnBroadcast.Enabled = ((bool)(resources.GetObject("btnBroadcast.Enabled")));
		this.btnBroadcast.FlatStyle = ((System.Windows.Forms.FlatStyle)(resources.GetObject("btnBroadcast.FlatStyle")));
		this.btnBroadcast.Font = ((System.Drawing.Font)(resources.GetObject("btnBroadcast.Font")));
		this.btnBroadcast.Image = ((System.Drawing.Image)(resources.GetObject("btnBroadcast.Image")));
		this.btnBroadcast.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("btnBroadcast.ImageAlign")));
		this.btnBroadcast.ImageIndex = ((int)(resources.GetObject("btnBroadcast.ImageIndex")));
		this.btnBroadcast.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("btnBroadcast.ImeMode")));
		this.btnBroadcast.Location = ((System.Drawing.Point)(resources.GetObject("btnBroadcast.Location")));
		this.btnBroadcast.Name = "btnBroadcast";
		this.btnBroadcast.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("btnBroadcast.RightToLeft")));
		this.btnBroadcast.Size = ((System.Drawing.Size)(resources.GetObject("btnBroadcast.Size")));
		this.btnBroadcast.TabIndex = ((int)(resources.GetObject("btnBroadcast.TabIndex")));
		this.btnBroadcast.Text = resources.GetString("btnBroadcast.Text");
		this.btnBroadcast.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("btnBroadcast.TextAlign")));
		this.btnBroadcast.Visible = ((bool)(resources.GetObject("btnBroadcast.Visible")));
		this.btnBroadcast.Click += new System.EventHandler(this.btnBroadcast_Click);
		// 
		// lblInstructions
		// 
		this.lblInstructions.AccessibleDescription = resources.GetString("lblInstructions.AccessibleDescription");
		this.lblInstructions.AccessibleName = resources.GetString("lblInstructions.AccessibleName");
		this.lblInstructions.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("lblInstructions.Anchor")));
		this.lblInstructions.AutoSize = ((bool)(resources.GetObject("lblInstructions.AutoSize")));
		this.lblInstructions.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("lblInstructions.Dock")));
		this.lblInstructions.Enabled = ((bool)(resources.GetObject("lblInstructions.Enabled")));
		this.lblInstructions.Font = ((System.Drawing.Font)(resources.GetObject("lblInstructions.Font")));
		this.lblInstructions.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(0)), ((System.Byte)(192)));
		this.lblInstructions.Image = ((System.Drawing.Image)(resources.GetObject("lblInstructions.Image")));
		this.lblInstructions.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("lblInstructions.ImageAlign")));
		this.lblInstructions.ImageIndex = ((int)(resources.GetObject("lblInstructions.ImageIndex")));
		this.lblInstructions.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("lblInstructions.ImeMode")));
		this.lblInstructions.Location = ((System.Drawing.Point)(resources.GetObject("lblInstructions.Location")));
		this.lblInstructions.Name = "lblInstructions";
		this.lblInstructions.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("lblInstructions.RightToLeft")));
		this.lblInstructions.Size = ((System.Drawing.Size)(resources.GetObject("lblInstructions.Size")));
		this.lblInstructions.TabIndex = ((int)(resources.GetObject("lblInstructions.TabIndex")));
		this.lblInstructions.Text = resources.GetString("lblInstructions.Text");
		this.lblInstructions.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("lblInstructions.TextAlign")));
		this.lblInstructions.Visible = ((bool)(resources.GetObject("lblInstructions.Visible")));
		// 
		// Label1
		// 
		this.Label1.AccessibleDescription = resources.GetString("Label1.AccessibleDescription");
		this.Label1.AccessibleName = resources.GetString("Label1.AccessibleName");
		this.Label1.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("Label1.Anchor")));
		this.Label1.AutoSize = ((bool)(resources.GetObject("Label1.AutoSize")));
		this.Label1.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("Label1.Dock")));
		this.Label1.Enabled = ((bool)(resources.GetObject("Label1.Enabled")));
		this.Label1.Font = ((System.Drawing.Font)(resources.GetObject("Label1.Font")));
		this.Label1.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(0)), ((System.Byte)(192)));
		this.Label1.Image = ((System.Drawing.Image)(resources.GetObject("Label1.Image")));
		this.Label1.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("Label1.ImageAlign")));
		this.Label1.ImageIndex = ((int)(resources.GetObject("Label1.ImageIndex")));
		this.Label1.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("Label1.ImeMode")));
		this.Label1.Location = ((System.Drawing.Point)(resources.GetObject("Label1.Location")));
		this.Label1.Name = "Label1";
		this.Label1.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("Label1.RightToLeft")));
		this.Label1.Size = ((System.Drawing.Size)(resources.GetObject("Label1.Size")));
		this.Label1.TabIndex = ((int)(resources.GetObject("Label1.TabIndex")));
		this.Label1.Text = resources.GetString("Label1.Text");
		this.Label1.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("Label1.TextAlign")));
		this.Label1.Visible = ((bool)(resources.GetObject("Label1.Visible")));
		// 
		// lstPlayers
		// 
		this.lstPlayers.AccessibleDescription = resources.GetString("lstPlayers.AccessibleDescription");
		this.lstPlayers.AccessibleName = resources.GetString("lstPlayers.AccessibleName");
		this.lstPlayers.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("lstPlayers.Anchor")));
		this.lstPlayers.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lstPlayers.BackgroundImage")));
		this.lstPlayers.ColumnWidth = ((int)(resources.GetObject("lstPlayers.ColumnWidth")));
		this.lstPlayers.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("lstPlayers.Dock")));
		this.lstPlayers.Enabled = ((bool)(resources.GetObject("lstPlayers.Enabled")));
		this.lstPlayers.Font = ((System.Drawing.Font)(resources.GetObject("lstPlayers.Font")));
		this.lstPlayers.HorizontalExtent = ((int)(resources.GetObject("lstPlayers.HorizontalExtent")));
		this.lstPlayers.HorizontalScrollbar = ((bool)(resources.GetObject("lstPlayers.HorizontalScrollbar")));
		this.lstPlayers.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("lstPlayers.ImeMode")));
		this.lstPlayers.IntegralHeight = ((bool)(resources.GetObject("lstPlayers.IntegralHeight")));
		this.lstPlayers.ItemHeight = ((int)(resources.GetObject("lstPlayers.ItemHeight")));
		this.lstPlayers.Location = ((System.Drawing.Point)(resources.GetObject("lstPlayers.Location")));
		this.lstPlayers.Name = "lstPlayers";
		this.lstPlayers.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("lstPlayers.RightToLeft")));
		this.lstPlayers.ScrollAlwaysVisible = ((bool)(resources.GetObject("lstPlayers.ScrollAlwaysVisible")));
		this.lstPlayers.Size = ((System.Drawing.Size)(resources.GetObject("lstPlayers.Size")));
		this.lstPlayers.TabIndex = ((int)(resources.GetObject("lstPlayers.TabIndex")));
		this.lstPlayers.Visible = ((bool)(resources.GetObject("lstPlayers.Visible")));
		// 
		// label2
		// 
		this.label2.AccessibleDescription = resources.GetString("label2.AccessibleDescription");
		this.label2.AccessibleName = resources.GetString("label2.AccessibleName");
		this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("label2.Anchor")));
		this.label2.AutoSize = ((bool)(resources.GetObject("label2.AutoSize")));
		this.label2.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("label2.Dock")));
		this.label2.Enabled = ((bool)(resources.GetObject("label2.Enabled")));
		this.label2.Font = ((System.Drawing.Font)(resources.GetObject("label2.Font")));
		this.label2.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(0)), ((System.Byte)(192)));
		this.label2.Image = ((System.Drawing.Image)(resources.GetObject("label2.Image")));
		this.label2.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("label2.ImageAlign")));
		this.label2.ImageIndex = ((int)(resources.GetObject("label2.ImageIndex")));
		this.label2.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("label2.ImeMode")));
		this.label2.Location = ((System.Drawing.Point)(resources.GetObject("label2.Location")));
		this.label2.Name = "label2";
		this.label2.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("label2.RightToLeft")));
		this.label2.Size = ((System.Drawing.Size)(resources.GetObject("label2.Size")));
		this.label2.TabIndex = ((int)(resources.GetObject("label2.TabIndex")));
		this.label2.Text = resources.GetString("label2.Text");
		this.label2.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("label2.TextAlign")));
		this.label2.Visible = ((bool)(resources.GetObject("label2.Visible")));
		// 
		// btnPM
		// 
		this.btnPM.AccessibleDescription = resources.GetString("btnPM.AccessibleDescription");
		this.btnPM.AccessibleName = resources.GetString("btnPM.AccessibleName");
		this.btnPM.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("btnPM.Anchor")));
		this.btnPM.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnPM.BackgroundImage")));
		this.btnPM.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("btnPM.Dock")));
		this.btnPM.Enabled = ((bool)(resources.GetObject("btnPM.Enabled")));
		this.btnPM.FlatStyle = ((System.Windows.Forms.FlatStyle)(resources.GetObject("btnPM.FlatStyle")));
		this.btnPM.Font = ((System.Drawing.Font)(resources.GetObject("btnPM.Font")));
		this.btnPM.Image = ((System.Drawing.Image)(resources.GetObject("btnPM.Image")));
		this.btnPM.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("btnPM.ImageAlign")));
		this.btnPM.ImageIndex = ((int)(resources.GetObject("btnPM.ImageIndex")));
		this.btnPM.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("btnPM.ImeMode")));
		this.btnPM.Location = ((System.Drawing.Point)(resources.GetObject("btnPM.Location")));
		this.btnPM.Name = "btnPM";
		this.btnPM.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("btnPM.RightToLeft")));
		this.btnPM.Size = ((System.Drawing.Size)(resources.GetObject("btnPM.Size")));
		this.btnPM.TabIndex = ((int)(resources.GetObject("btnPM.TabIndex")));
		this.btnPM.Text = resources.GetString("btnPM.Text");
		this.btnPM.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("btnPM.TextAlign")));
		this.btnPM.Visible = ((bool)(resources.GetObject("btnPM.Visible")));
		// 
		// btnKick
		// 
		this.btnKick.AccessibleDescription = resources.GetString("btnKick.AccessibleDescription");
		this.btnKick.AccessibleName = resources.GetString("btnKick.AccessibleName");
		this.btnKick.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("btnKick.Anchor")));
		this.btnKick.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnKick.BackgroundImage")));
		this.btnKick.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("btnKick.Dock")));
		this.btnKick.Enabled = ((bool)(resources.GetObject("btnKick.Enabled")));
		this.btnKick.FlatStyle = ((System.Windows.Forms.FlatStyle)(resources.GetObject("btnKick.FlatStyle")));
		this.btnKick.Font = ((System.Drawing.Font)(resources.GetObject("btnKick.Font")));
		this.btnKick.Image = ((System.Drawing.Image)(resources.GetObject("btnKick.Image")));
		this.btnKick.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("btnKick.ImageAlign")));
		this.btnKick.ImageIndex = ((int)(resources.GetObject("btnKick.ImageIndex")));
		this.btnKick.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("btnKick.ImeMode")));
		this.btnKick.Location = ((System.Drawing.Point)(resources.GetObject("btnKick.Location")));
		this.btnKick.Name = "btnKick";
		this.btnKick.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("btnKick.RightToLeft")));
		this.btnKick.Size = ((System.Drawing.Size)(resources.GetObject("btnKick.Size")));
		this.btnKick.TabIndex = ((int)(resources.GetObject("btnKick.TabIndex")));
		this.btnKick.Text = resources.GetString("btnKick.Text");
		this.btnKick.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("btnKick.TextAlign")));
		this.btnKick.Visible = ((bool)(resources.GetObject("btnKick.Visible")));
		// 
		// textBox1
		// 
		this.textBox1.AccessibleDescription = resources.GetString("textBox1.AccessibleDescription");
		this.textBox1.AccessibleName = resources.GetString("textBox1.AccessibleName");
		this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("textBox1.Anchor")));
		this.textBox1.AutoSize = ((bool)(resources.GetObject("textBox1.AutoSize")));
		this.textBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("textBox1.BackgroundImage")));
		this.textBox1.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("textBox1.Dock")));
		this.textBox1.Enabled = ((bool)(resources.GetObject("textBox1.Enabled")));
		this.textBox1.Font = ((System.Drawing.Font)(resources.GetObject("textBox1.Font")));
		this.textBox1.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("textBox1.ImeMode")));
		this.textBox1.Location = ((System.Drawing.Point)(resources.GetObject("textBox1.Location")));
		this.textBox1.MaxLength = ((int)(resources.GetObject("textBox1.MaxLength")));
		this.textBox1.Multiline = ((bool)(resources.GetObject("textBox1.Multiline")));
		this.textBox1.Name = "textBox1";
		this.textBox1.PasswordChar = ((char)(resources.GetObject("textBox1.PasswordChar")));
		this.textBox1.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("textBox1.RightToLeft")));
		this.textBox1.ScrollBars = ((System.Windows.Forms.ScrollBars)(resources.GetObject("textBox1.ScrollBars")));
		this.textBox1.Size = ((System.Drawing.Size)(resources.GetObject("textBox1.Size")));
		this.textBox1.TabIndex = ((int)(resources.GetObject("textBox1.TabIndex")));
		this.textBox1.Text = resources.GetString("textBox1.Text");
		this.textBox1.TextAlign = ((System.Windows.Forms.HorizontalAlignment)(resources.GetObject("textBox1.TextAlign")));
		this.textBox1.Visible = ((bool)(resources.GetObject("textBox1.Visible")));
		this.textBox1.WordWrap = ((bool)(resources.GetObject("textBox1.WordWrap")));
		// 
		// label3
		// 
		this.label3.AccessibleDescription = resources.GetString("label3.AccessibleDescription");
		this.label3.AccessibleName = resources.GetString("label3.AccessibleName");
		this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("label3.Anchor")));
		this.label3.AutoSize = ((bool)(resources.GetObject("label3.AutoSize")));
		this.label3.Dock = ((System.Windows.Forms.DockStyle)(resources.GetObject("label3.Dock")));
		this.label3.Enabled = ((bool)(resources.GetObject("label3.Enabled")));
		this.label3.Font = ((System.Drawing.Font)(resources.GetObject("label3.Font")));
		this.label3.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(0)), ((System.Byte)(192)));
		this.label3.Image = ((System.Drawing.Image)(resources.GetObject("label3.Image")));
		this.label3.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("label3.ImageAlign")));
		this.label3.ImageIndex = ((int)(resources.GetObject("label3.ImageIndex")));
		this.label3.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("label3.ImeMode")));
		this.label3.Location = ((System.Drawing.Point)(resources.GetObject("label3.Location")));
		this.label3.Name = "label3";
		this.label3.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("label3.RightToLeft")));
		this.label3.Size = ((System.Drawing.Size)(resources.GetObject("label3.Size")));
		this.label3.TabIndex = ((int)(resources.GetObject("label3.TabIndex")));
		this.label3.Text = resources.GetString("label3.Text");
		this.label3.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("label3.TextAlign")));
		this.label3.Visible = ((bool)(resources.GetObject("label3.Visible")));
		// 
		// frmMain
		// 
		this.AccessibleDescription = resources.GetString("$this.AccessibleDescription");
		this.AccessibleName = resources.GetString("$this.AccessibleName");
		this.AutoScaleBaseSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScaleBaseSize")));
		this.AutoScroll = ((bool)(resources.GetObject("$this.AutoScroll")));
		this.AutoScrollMargin = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMargin")));
		this.AutoScrollMinSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMinSize")));
		this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
		this.ClientSize = ((System.Drawing.Size)(resources.GetObject("$this.ClientSize")));
		this.Controls.Add(this.label3);
		this.Controls.Add(this.textBox1);
		this.Controls.Add(this.btnKick);
		this.Controls.Add(this.btnPM);
		this.Controls.Add(this.label2);
		this.Controls.Add(this.lstPlayers);
		this.Controls.Add(this.Label1);
		this.Controls.Add(this.lblInstructions);
		this.Controls.Add(this.btnBroadcast);
		this.Controls.Add(this.txtBroadcast);
		this.Controls.Add(this.lstStatus);
		this.Enabled = ((bool)(resources.GetObject("$this.Enabled")));
		this.Font = ((System.Drawing.Font)(resources.GetObject("$this.Font")));
		this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
		this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
		this.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("$this.ImeMode")));
		this.Location = ((System.Drawing.Point)(resources.GetObject("$this.Location")));
		this.MaximizeBox = false;
		this.MaximumSize = ((System.Drawing.Size)(resources.GetObject("$this.MaximumSize")));
		this.Menu = this.mnuMain;
		this.MinimumSize = ((System.Drawing.Size)(resources.GetObject("$this.MinimumSize")));
		this.Name = "frmMain";
		this.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("$this.RightToLeft")));
		this.StartPosition = ((System.Windows.Forms.FormStartPosition)(resources.GetObject("$this.StartPosition")));
		this.Text = resources.GetString("$this.Text");
		this.Closing += new System.ComponentModel.CancelEventHandler(this.frmMain_Closing);
		this.Load += new System.EventHandler(this.frmMain_Load);
		this.ResumeLayout(false);
 
	}
 
#endregion
 
#region " Standard Menu Code "
 
    // This code simply shows the About form.
    private void mnuAbout_Click(object sender, System.EventArgs e) 
	{
        // Open the About form in Dialog Mode
        frmAbout frm = new frmAbout();
        frm.ShowDialog(this);
        frm.Dispose();
    }
 
    // This code will close the form.
    private void mnuExit_Click(object sender, System.EventArgs e) 
	{
        // Close the current form
        this.Close();
    }
 
#endregion
 
    const int PORT_NUM = 10000;
    private Hashtable clients = new Hashtable();
    private TcpListener listener;
    private Thread listenerThread;
 
    // This subroutine sends a message to all attached clients
    private void Broadcast(string strMessage)
	{
		UserConnection client;
        // All entries in the clients Hashtable are UserConnection so it is possible
        // to assign it safely.
        foreach(DictionaryEntry entry in clients)
		{
            client = (UserConnection) entry.Value;
            client.SendData(strMessage);
        }
    }
 
    // This subroutine sends the contents of the Broadcast textbox to all clients, if
    // it is not empty, and clears the textbox
    private void btnBroadcast_Click(object sender, System.EventArgs e) 
	{
        if (txtBroadcast.Text != "")
		{
            UpdateStatus("Broadcasting: " + txtBroadcast.Text);
            Broadcast("BROAD|" + txtBroadcast.Text);
            txtBroadcast.Text = string.Empty;
        }
    }
 
    // This subroutine checks to see if username already exists in the clients 
    // Hashtable.  if it does, send a REFUSE message, otherwise confirm with a JOIN.
    private void ConnectUser(string userName, UserConnection sender)
	{
		if (clients.Contains(userName))
		{
			ReplyToSender("REFUSE", sender);
		}
		else 
		{
			sender.Name = userName;
			UpdateStatus(userName + " has joined the chat.");
			clients.Add(userName, sender);
			lstPlayers.Items.Add(sender.Name);
			// Send a JOIN to sender, and notify all other clients that sender joined
			ReplyToSender("JOIN", sender);
			SendToClients("CHAT|" + sender.Name + " has joined the chat.", sender);
		}
    }
 
    // This subroutine notifies other clients that sender left the chat, and removes
    // the name from the clients Hashtable
    private void DisconnectUser(UserConnection sender)
	{
        UpdateStatus(sender.Name + " has left the chat.");
        SendToClients("CHAT|" + sender.Name + " has left the chat.", sender);
        clients.Remove(sender.Name);
		lstPlayers.Items.Remove(sender.Name);
    }
 
    // This subroutine is used a background listener thread to allow reading incoming
    // messages without lagging the user interface.
    private void DoListen()
	{
        try {
            // Listen for new connections.
            listener = new TcpListener(System.Net.IPAddress.Any, PORT_NUM);
            listener.Start();
 
			do
			{
				// Create a new user connection using TcpClient returned by
				// TcpListener.AcceptTcpClient()
				UserConnection client = new UserConnection(listener.AcceptTcpClient());
				// Create an event handler to allow the UserConnection to communicate
				// with the window.
				client.LineReceived += new LineReceive(OnLineReceived);
				//AddHandler client.LineReceived, AddressOf OnLineReceived;
				UpdateStatus("new connection found: waiting for log-in");
			}while(true);
        } 
		catch(Exception ex){
			//MessageBox.Show(ex.ToString());
        }
    }
 
    // When the window closes, stop the listener.
    private void frmMain_Closing(object sender, System.ComponentModel.CancelEventArgs e) //base.Closing;
	{
        listener.Stop();
    }
 
    // Start the background listener thread.
    private void frmMain_Load(object sender, System.EventArgs e) 
	{
        listenerThread = new Thread(new ThreadStart(DoListen));
        listenerThread.Start();
        UpdateStatus("Listener started");
    }
 
    // Concatenate all the client names and send them to the user who requested user list
    private void ListUsers(UserConnection sender)
	{
        UserConnection client;       
        string strUserList;
        UpdateStatus("Sending " + sender.Name + " a list of users online.");
        strUserList = "LISTUSERS";
        // All entries in the clients Hashtable are UserConnection so it is possible
        // to assign it safely.
 
        foreach(DictionaryEntry entry in clients)
		{
            client = (UserConnection) entry.Value;
            strUserList = strUserList + "|" + client.Name;
        }
 
        // Send the list to the sender.
        ReplyToSender(strUserList, sender);
    }
 
    // This is the event handler for the UserConnection when it receives a full line.
    // Parse the cammand and parameters and take appropriate action.
    private void OnLineReceived(UserConnection sender, string data)
	{
        string[] dataArray;
        // Message parts are divided by "|"  Break the string into an array accordingly.
		// Basically what happens here is that it is possible to get a flood of data during
		// the lock where we have combined commands and overflow
		// to simplify this proble, all I do is split the response by char 13 and then look
		// at the command, if the command is unknown, I consider it a junk message
		// and dump it, otherwise I act on it
		dataArray = data.Split((char) 13);
        dataArray = dataArray[0].Split((char) 124);
 
        // dataArray(0) is the command.
        switch( dataArray[0])
		{
            case "CONNECT":
                ConnectUser(dataArray[1], sender);
				break;
            case "CHAT":
                SendChat(dataArray[1], sender);
				break;
            case "DISCONNECT":
                DisconnectUser(sender);
				break;
            case "REQUESTUSERS":
                ListUsers(sender);
				break;
            default: 
                // Message is junk do nothing with it.
				break;
        }
    }
 
    // This subroutine sends a response to the sender.
    private void ReplyToSender(string strMessage, UserConnection sender)
	{
        sender.SendData(strMessage);
    }
 
    // Send a chat message to all clients except sender.
    private void SendChat(string message, UserConnection sender)
	{
        UpdateStatus(sender.Name + ": " + message);
        SendToClients("CHAT|" + sender.Name + ": " + message, sender);
    }
 
    // This subroutine sends a message to all attached clients except the sender.
    private void SendToClients(string strMessage, UserConnection sender)
	{
        UserConnection client;
        // All entries in the clients Hashtable are UserConnection so it is possible
        // to assign it safely.
        foreach(DictionaryEntry entry in clients)
		{
            client = (UserConnection) entry.Value;
            // Exclude the sender.
            if (client.Name != sender.Name)
			{
                client.SendData(strMessage);
            }
        }
    }
 
    // This subroutine adds line to the Status listbox
    private void UpdateStatus(string statusMessage)
	{
        lstStatus.Items.Add(statusMessage);
    }
}



UserConnection.cs Code:

using System;
using System.Net.Sockets;
using System.Text;
using System.IO;
 
public delegate void LineReceive(UserConnection sender, string Data);
 
// The UserConnection class encapsulates the functionality of a TcpClient connection
// with streaming for a single user.
 
public class UserConnection
{
    const int READ_BUFFER_SIZE = 255;
    // Overload the new operator to set up a read thread.
    public UserConnection(TcpClient client)
	{
        this.client = client;
        // This starts the asynchronous read thread.  The data will be saved into
        // readBuffer.
        this.client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);
    }
 
    private TcpClient client;
    private byte[] readBuffer = new byte[READ_BUFFER_SIZE];
    private string strName;
 
    // The Name property uniquely identifies the user connection.
    public string Name
	{
        get {
            return strName;
        }
        set {
            strName = value;
        }
    }
 
    public event LineReceive LineReceived;
 
    // This subroutine uses a StreamWriter to send a message to the user.
    public void SendData(string Data)
	{
        //lock ensure that no other threads try to use the stream at the same time.
        lock (client.GetStream())
		{
			StreamWriter writer = new StreamWriter(client.GetStream());
			writer.Write(Data + (char) 13 + (char) 10);
			// Make sure all data is sent now.
			writer.Flush();
		}
    }
 
    // This is the callback function for TcpClient.GetStream.Begin. It begins an 
    // asynchronous read from a stream.
    private void StreamReceiver(IAsyncResult ar)
	{
        int BytesRead;
        string strMessage;
 
        try 
		{
            // Ensure that no other threads try to use the stream at the same time.
			lock (client.GetStream())
			{
				// Finish asynchronous read into readBuffer and get number of bytes read.
				BytesRead = client.GetStream().EndRead(ar);
			}
            // Convert the byte array the message was saved into, minus one for the
            // Chr(13).
            strMessage = Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 1);
            LineReceived(this, strMessage);
            // Ensure that no other threads try to use the stream at the same time.
			lock (client.GetStream())
			{
				// Start a new asynchronous read into readBuffer.
				client.GetStream().BeginRead(readBuffer, 0, READ_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);
			}
		} 
		catch( Exception e){
        }
    }
}
Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox