📄 myserver.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 + -