好贷网好贷款

异步通信实例(一)Server

发布时间:2016-12-3 10:28:13 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"异步通信实例(一)Server",主要涉及到异步通信实例(一)Server方面的内容,对于异步通信实例(一)Server感兴趣的同学可以参考一下。

  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();            }        }    }}

上一篇:RSS从入门到精通
下一篇:poi(2)解析jar并写入excel

相关文章

相关评论