⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myserver.cs

📁 一个不错的网络编程例子
💻 CS
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace SocketServer
{
	/// <summary>
	/// myServer 的摘要说明。
	/// </summary>
	public class myServer : System.Windows.Forms.Form
	{
		private System.Windows.Forms.ListBox listBox1;
		private TcpListener tcp;
		private Hashtable userList;
		private Thread mythread;
		/// <summary>
		/// 必需的设计器变量。
		/// </summary>
		private System.ComponentModel.Container components = null;

		public myServer()
		{
			//
			// Windows 窗体设计器支持所必需的
			//
			InitializeComponent();
			userList=new Hashtable();
			mythread=new Thread(new ThreadStart(startListen));
			mythread.Start();
		}

		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}
		private void startListen()
		{
			try
			{
				tcp=new TcpListener(5151);
				tcp.Start();
				AddLog("服务器已启动!");
				while(true)
				{
					myclient client=new myclient(tcp.AcceptTcpClient());
					client.connected+=new ConnectDelegate(client_connected);
					client.message+=new MessageDelegate(client_message);
					client.disconnect+=new DisconnectDelegate(client_disconnect);
					client.Connect();
				}
			}
			catch
			{
				tcp.Stop();
			}
		}
		private void client_connected(object sender,System.EventArgs e)
		{
			myclient client=(myclient)sender;
			userList.Add(client.ClientID,client);
			AddLog(client.UserName+": 连接成功!");
			myclient tmpclient;
			foreach(DictionaryEntry d in userList)
			{
				tmpclient=(myclient)d.Value;
				tmpclient.Send(tmpclient.ClientID+"@Connect@"+client.UserName);
			}
		}
		private void client_message(object sender,SocketServer.MessageEventArgs   e)
		{
			myclient client=(myclient)sender;
			AddLog(client.UserName+":"+e.Message);
			myclient tmpclient;
			foreach(DictionaryEntry d in userList)
			{
				tmpclient=(myclient)d.Value;
				tmpclient.Send(client.UserName+":"+e.Message);
			}
		}
		private void client_disconnect(object sender,System.EventArgs e)
		{
			myclient client=(myclient)sender;
			if(userList.ContainsKey(client.ClientID))
			{
				AddLog(client.UserName+"已退出!");
				userList.Remove(client.ClientID);
				myClientList.RemoveClient(client.ClientID,client.UserName);
				myclient tmpclient;
				foreach(DictionaryEntry d in userList)
				{
					tmpclient=(myclient)d.Value;
					tmpclient.Send(tmpclient.ClientID+"@Disconnect@"+client.UserName);
				}
			}
		}
		private void AddLog(string msg)
		{
			this.listBox1.Items.Add(msg);
		}
		#region Windows 窗体设计器生成的代码
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			this.listBox1 = new System.Windows.Forms.ListBox();
			this.SuspendLayout();
			// 
			// listBox1
			// 
			this.listBox1.ItemHeight = 12;
			this.listBox1.Location = new System.Drawing.Point(8, 0);
			this.listBox1.Name = "listBox1";
			this.listBox1.Size = new System.Drawing.Size(464, 424);
			this.listBox1.TabIndex = 0;
			// 
			// myServer
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.ClientSize = new System.Drawing.Size(480, 429);
			this.Controls.Add(this.listBox1);
			this.Name = "myServer";
			this.Text = "myServer";
			this.Closing += new System.ComponentModel.CancelEventHandler(this.myServer_Closing);
			this.ResumeLayout(false);

		}
		#endregion

		private void myServer_Closing(object sender, System.ComponentModel.CancelEventArgs e)
		{
			tcp.Stop();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -