using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace TServer ... { /**//// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.Form ...{ private System.Windows.Forms.TextBox txt; private System.Net.Sockets.Socket server; private System.Windows.Forms.ComboBox cmbIP; private System.Windows.Forms.Button btnStart; private System.Windows.Forms.Button btnStop; private System.Windows.Forms.StatusBar statBar; private System.Threading.ManualResetEvent allDone; private byte[] buffer; /**//// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public Form1() ...{ // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /**//// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) ...{ if( disposing ) ...{ if (components != null) ...{ components.Dispose(); } } base.Dispose( disposing ); } Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码 /**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() ...{ this.txt = new System.Windows.Forms.TextBox(); this.cmbIP = new System.Windows.Forms.ComboBox(); this.btnStart = new System.Windows.Forms.Button(); this.btnStop = new System.Windows.Forms.Button(); this.statBar = new System.Windows.Forms.StatusBar(); this.SuspendLayout(); // // txt // this.txt.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.txt.Location = new System.Drawing.Point(0, 40); this.txt.Multiline = true; this.txt.Name = "txt"; this.txt.Size = new System.Drawing.Size(472, 232); this.txt.TabIndex = 0; this.txt.Text = ""; // // cmbIP // this.cmbIP.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbIP.Location = new System.Drawing.Point(8, 8); this.cmbIP.Name = "cmbIP"; this.cmbIP.Size = new System.Drawing.Size(144, 20); this.cmbIP.TabIndex = 1; // // btnStart // this.btnStart.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.btnStart.Location = new System.Drawing.Point(168, 8); this.btnStart.Name = "btnStart"; this.btnStart.TabIndex = 2; this.btnStart.Text = "开始"; this.btnStart.Click += new System.EventHandler(this.btnStart_Click); // // btnStop // this.btnStop.FlatStyle = System.Windows.Forms.FlatStyle.Popup; this.btnStop.Location = new System.Drawing.Point(272, 8); this.btnStop.Name = "btnStop"; this.btnStop.TabIndex = 2; this.btnStop.Text = "停止"; // // statBar // this.statBar.Location = new System.Drawing.Point(0, 272); this.statBar.Name = "statBar"; this.statBar.Size = new System.Drawing.Size(472, 22); this.statBar.TabIndex = 3; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(472, 294); this.Controls.Add(this.statBar); this.Controls.Add(this.btnStart); this.Controls.Add(this.cmbIP); this.Controls.Add(this.txt); this.Controls.Add(this.btnStop); this.Name = "Form1"; this.Text = "服务器端"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); } #endregion /**//// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() ...{ Application.Run(new Form1()); } private void Form1_Load(object sender, System.EventArgs e) ...{ this.server = new Socket( AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp ); this.allDone = new ManualResetEvent( true ); this.cmbIP.Items.Clear(); foreach( IPAddress ip in Dns.GetHostByName( Dns.GetHostName() ).AddressList ) ...{ this.cmbIP.Items.Add( ip.ToString() ); } if( this.cmbIP.Items.Count > 0 ) this.cmbIP.SelectedIndex = 0; this.statBar.Text = "初始化完成..."; this.btnStop.Enabled = false; this.buffer = new byte[ 1024]; } private void btnStart_Click(object sender, System.EventArgs e) ...{ try ...{ IPEndPoint ipep = new IPEndPoint( IPAddress.Parse( this.cmbIP.Text ),9000 ); this.server.Bind( (EndPoint)ipep ); this.server.Listen( 10 ); this.server.BeginAccept( new AsyncCallback( this.AcceptCallback ),this.server ); this.statBar.Text = "服务器" + ipep.ToString() + "正在监听..."; this.txt.Text = "开始等待客户端连接..."; } catch( Exception ex ) ...{ this.txt.Text += " " + ex.ToString(); } } private void AcceptCallback( System.IAsyncResult iar ) ...{ if( iar.IsCompleted ) ...{ try ...{ Socket oldServer = (Socket)iar.AsyncState; Socket client = (Socket)oldServer.EndAccept( iar ); this.txt.Text += " 远程客户端:" + client.RemoteEndPoint.ToString() + "连接..."; byte[] send = System.Text.Encoding.Default.GetBytes( "服务器端的响应 at " + DateTime.Now.ToString() ); client.BeginSend( send,0,send.Length,SocketFlags.None,new AsyncCallback(this.SendCallback ),client ); } catch( Exception ex ) ...{ this.txt.Text += " " + ex.ToString(); } } } private void SendCallback( System.IAsyncResult iar ) ...{ try ...{ Socket socket = (Socket)iar.AsyncState; int send = socket.EndSend( iar ); this.txt.Text += " 已发送至客户端数据,大小为:" + send.ToString(); socket.BeginReceive(this.buffer,0,this.buffer.Length,SocketFlags.None,new AsyncCallback(this.ReceiveCallback),socket ); } catch( Exception ex ) ...{ this.txt.Text += " " + ex.ToString(); } } private void StartReceive() ...{// this.allDone.Reset();// this.server.BeginReceive( this.buffer,0,this.buffer.Length,SocketFlags.None,new AsyncCallback(this.ReceiveCallback ),this.server );// this.allDone.WaitOne(); } private void ReceiveCallback( System.IAsyncResult iar ) ...{ try ...{ Socket client = (Socket)iar.AsyncState; int recv = client.EndReceive( iar ); if( recv == 0 ) ...{ client.Close(); this.txt.Text += " 等待客户端连接..:"; this.server.BeginAccept( new AsyncCallback(this.AcceptCallback),this.server ); return; } string msg = System.Text.Encoding.Default.GetString( this.buffer,0,recv ); this.txt.Text += " 从" + client.RemoteEndPoint.ToString() + "接收到的数据是:" + msg; byte[] re = System.Text.Encoding.Default.GetBytes( "服务器端已收到:" + msg ); client.BeginSend( re,0,re.Length,SocketFlags.None,new AsyncCallback(this.SendCallback ),client ); } catch( Exception ex ) ...{ this.txt.Text += " " + ex.ToString(); } } }}