.net中axWinsock 監聽多個客戶端

網上針對於.net中的axWinsock 控件的資料比較少,而且案例更是少的可憐。

前段時間一直在折磨 axWinsock 如何監聽多個客戶端。現在終於把它弄出來了,希望能幫到需要的人。

服務器端:

添加axWinsock 控件到窗體中。在控件屬性中設置端口 LocalPort 如:1001,IP地址LocalIP,控件會自動綁定了。

1、在窗體加載事件中開啓axWinsock1監聽

 private void Form1_Load(object sender, EventArgs e)
 {
            axWinsock1.Listen();//開啓監聽
}

2、在窗體後臺代碼創建兩個事件

(1)接收發送事件

private void ax_DataArrival(object sender, AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e)
        {
            try
            {
                object data = "";
                AxMSWinsockLib.AxWinsock sendsock = (AxMSWinsockLib.AxWinsock)sender;
                sendsock.GetData(ref data);//接收
                sendsock.SendData(sendsock.RemoteHostIP + ":" + sendsock.RemotePort + ",知道了,客戶端。我是服務器!" + "\n");//發送
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

(2)axWinsock斷開事件

  private void ax_CloseEvent(object sender, EventArgs e)
        {
            AxMSWinsockLib.AxWinsock sendsock = (AxMSWinsockLib.AxWinsock)sender;
            socklist.Remove(sendsock);
            this.Controls.Remove(sendsock);
        }

3、給axWinsock ConnectionRequest事件中添加以下代碼

int k;

  private void axWinsock1_ConnectionRequest(object sender, AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent e)
 {

                    //創建AxWinsock 控件綁定不同的客戶端,並且添加到窗體中
                    AxMSWinsockLib.AxWinsock axsock = new AxMSWinsockLib.AxWinsock();
                    axsock.Name = (axsock + e.requestID.ToString() + k.ToString());
                    ((System.ComponentModel.ISupportInitialize)(axsock)).BeginInit();
                    this.Controls.Add(axsock);
                    int rows = this.Controls.Count;
                    ((System.ComponentModel.ISupportInitialize)(axsock)).EndInit();
                    axsock.Accept(e.requestID);
                    k++;
                    axsock.DataArrival += ax_DataArrival;//給客戶端綁定接收發送事件
                    axsock.CloseEvent += ax_CloseEvent;

}

服務器已經創建完畢

============================================================================================================

客戶端:

1、在客戶端窗體中添加axWinsock控件

2、在窗體加載中開啓axWinsock 連接服務器

  private void Form1_Load(object sender, EventArgs e)
        {
            axWinsock1.Connect(服務器IP, 服務器端口);
        }

3、給axWinsock控件中的ConnectionRequest事件中接收服務器發來的信息

     private void axWinsock1_DataArrival(object sender, AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent e)
        {
            object data = "";
            axWinsock1.GetData(ref data);
            richTextBox1.AppendText((String)data+"\n");
        }

4、發送信息

     //發送按鈕事件

      private void button2_Click(object sender, EventArgs e)
        {
            axWinsock1.SendData("我是客戶端啊!");
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章