亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.NET中Socket編程的簡單示例

2019-11-18 17:03:59
字體:
來源:轉載
供稿:網友

以下示例程序實現簡單的Socket通信,可以開多個客戶端。本機測試通過,未做聯機測試。

Server:

using System.Net;

using System.Net.Sockets;

using System.Threading;

using System.Collections;

 

namespace MySocketServer1

{

    public partial class Form1 : Form

    {

        PRivate ipAddress serverIP = IPAddress.Parse("127.0.0.1");//以本機作測試

        private IPEndPoint serverFullAddr;//完整終端地址

        private Socket sock;

        private System.Timers.Timer myTimer;

        private ArrayList alSock;//當建立了多個連接時用于保存連接

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void btStart_Click(object sender, EventArgs e)

        {

            serverFullAddr = new IPEndPoint(serverIP, 1000);//取端口號1000

//構造Socket對象,套接字類型為“流套接字”,指定五元組中的協議元

            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

//指定五元組中的本地二元,即本地主機地址和端口號

            sock.Bind(serverFullAddr);

//監聽是否有連接傳入,指定掛起的連接隊列的最大值為20

            sock.Listen(20);

 

            alSock = new ArrayList();

 

//構造定時器,時間間隙為1秒,即每隔一秒執行一次accept()方法,以獲取連接請求隊列中//第一個掛起的連接請求

            myTimer =new System.Timers.Timer(1000);

            myTimer.Elapsed +=new System.Timers.ElapsedEventHandler(myTimer_Elapsed);

            myTimer.Enabled = true;

        }

 

        private void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

        {

            myTimer.Enabled = false;

//執行accept(),當掛起隊列為空時將阻塞本線程,同時由于上一語句,定時器將停止,直//至有連接傳入

            Socket acceptSock = sock.Accept();

//將accept()產生的Socket對象存入ArrayList

            alSock.Add(acceptSock);

// 構造Threading.Timer對象,這將導致程序另啟線程。線程將執行回調函數,該委托限制//函數參數須為object型。Threading.Timer構造器的第二個參數即傳入回調函數的參數;第//三個參數指定調用回調函數之前的延時,取0則立即啟動;最后一個參數指定調用回調函數//的時間間隔,取0則只執行一次。

            System.Threading.Timer ti = new System.Threading.Timer(new

TimerCallback(ReceiveMsg), acceptSock, 0, 0);

            myTimer.Enabled = true;

        }

 

        private void ReceiveMsg(object obj)

        {

            Socket acceptSock = (Socket)obj;

            try

            {

                while (true)

                {

                    byte[] byteArray = new byte[100];

                    acceptSock.Receive(byteArray);//接收數據

//將字節數組轉成字符串

                    string strRec = System.Text.Encoding.UTF8.GetString(byteArray);

                    if (this.rtbReceive.InvokeRequired)

                    {

                        this.rtbReceive.Invoke(new EventHandler(this.ChangeRickTextBox), new

object[] { strRec, EventArgs.Empty });

                    }

                }

            }

            catch(Exception ex)

            {

                acceptSock.Close();

                MessageBox.Show("S:Receive Message Error"+ex.Message);

            }

        }

 

        private void ChangeRickTextBox(object obj,EventArgs e)

        {

            string s = System.Convert.ToString(obj);

            this.rtbReceive.AppendText(s + Environment.NewLine);

        }

 

        private void btSend_Click(object sender, EventArgs e)

        {

            Socket sc=null;

            byte[] byteSend =

System.Text.Encoding.UTF8.GetBytes(this.tbSend.Text.ToCharArray());

            try

            {

//同時存在若干個客戶端連接時,在textBox1中輸入要發送的是哪個連接

                int index = int.Parse(this.textBox1.Text.Trim());

                sc = (Socket)alSock[index - 1];

//發送數據

                sc.Send(byteSend);

            }

            catch(Exception ex)

            {

if(sc != null)

{

                sc.Close();

}

                MessageBox.Show("S:Send Message Error"+ex.Message);

            }

        }

 

        private void btClose_Click(object sender, EventArgs e)

        {

            try

            {

                application.Exit();

            }

            catch (Exception ex)

            {

                MessageBox.Show("S:Close Socket Error" + ex.Message);

            }

        }

    }

}

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

Client:

using System.Net;

using System.Net.Sockets;

using System.Threading;

 

namespace MySocketClient1

{

    public partial class Form1 : Form

    {

        private IPAddress serverIP = IPAddress.Parse("127.0.0.1");

        private IPEndPoint serverFullAddr;

        private Socket sock;

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void btConnect_Click(object sender, EventArgs e)

        {

            try

            {

                serverFullAddr = new IPEndPoint(serverIP, 1000);

                sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

                sock.Connect(serverFullAddr);//建立與遠程主機的連接

 

//啟動新線程用于接收數據

                Thread t = new Thread(new ThreadStart(ReceiveMsg));

                t.Name = "Receive Message";

//一個線程或者是后臺線程或者是前臺線程。后臺線程與前臺線程類似,區別是后臺線//程不會防止進程終止。一旦屬于某一進程的所有前臺線程都終止,公共語言運行庫就//會通過對任何仍然處于活動狀態的后臺線程調用 Abort 來結束該進程。

                t.IsBackground = true;

                t.Start();

            }

            catch(Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

 

        private void ReceiveMsg()

        {

            try

            {

                while (true)

                {

                    byte[] byteRec = new byte[100];

                    this.sock.Receive(byteRec);

                    string strRec = System.Text.Encoding.UTF8.GetString(byteRec);

                    if (this.rtbReceive.InvokeRequired)

                    {

                        this.rtbReceive.Invoke(new EventHandler(ChangeRtb), new object[]

{ strRec, EventArgs.Empty });

                    }

                }

            }

            catch(Exception ex)

            {

                MessageBox.Show("Receive Message Error"+ex.Message);

            }

        }

 

        private void ChangeRtb(object obj, EventArgs e)

        {

            string s = System.Convert.ToString(obj);

            this.rtbReceive.AppendText(s + Environment.NewLine);

        }

 

        private void btSend_Click(object sender, EventArgs e)

        {

            byte[] byteSend =

System.Text.Encoding.UTF8.GetBytes(this.tbSend.Text.ToCharArray());

            try

            {

                this.sock.Send(byteSend);

            }

            catch

            {

                MessageBox.Show("Send Message Error");

            }

        }

 

        private void btClose_Click(object sender, EventArgs e)

        {

            try

            {

                this.sock.Shutdown(SocketShutdown.Receive);

                this.sock.Close();

                Application.Exit();

            }

            catch

            {

                MessageBox.Show("Exit Error");

            }

        }

    }

}

不解之處:

Client端紅色標注語句:this.sock.Shutdown(SocketShutdown.Receive),如改成

this.sock.Shutdown(SocketShutdown.Both);或this.sock.Shutdown(SocketShutdown.Send);

則當點擊Cloce按鈕時,CPU使用率瘋漲到100%,而使用this.sock.Shutdown(SocketShutdown.Receive);

或不調用Shutdown()方法則沒有這個問題。難道客戶端不應該用Shutdown()?

http://www.49028c.com/KissKnife/archive/2006/08/13/475707.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国语对白做受69| 久久久国产影院| 久久精品视频在线观看| 亚洲成人999| 91精品国产网站| 国产热re99久久6国产精品| 亚洲一区制服诱惑| 日韩a**中文字幕| 亚洲国产精品va在看黑人| xvideos国产精品| 日韩精品在线视频美女| 国产成人精品日本亚洲专区61| 黑人巨大精品欧美一区二区| 免费不卡在线观看av| 亚洲美女久久久| 国产精品h片在线播放| 日韩暖暖在线视频| 国产一区二区三区高清在线观看| 亚洲免费视频观看| 久久久久久综合网天天| 久久久久国产精品www| 国产在线观看不卡| 精品美女久久久久久免费| 午夜精品一区二区三区在线视频| 国产一区二区三区四区福利| 在线播放亚洲激情| 性欧美亚洲xxxx乳在线观看| 国产精品爽黄69天堂a| 成人免费看片视频| 色综久久综合桃花网| 亚洲美女动态图120秒| 成人综合国产精品| 亚洲美女免费精品视频在线观看| 国产精品欧美一区二区三区奶水| 中文字幕视频在线免费欧美日韩综合在线看| 欧美高跟鞋交xxxxxhd| 亚洲国产欧美在线成人app| 国产午夜精品久久久| 日本高清久久天堂| 成人精品福利视频| 欧美大胆在线视频| 日韩在线高清视频| 全亚洲最色的网站在线观看| 国产91精品高潮白浆喷水| 亚洲欧美制服第一页| 在线观看免费高清视频97| 久久99久久99精品免观看粉嫩| 亚洲欧美国产精品久久久久久久| 国产精品一二三视频| 亚洲天堂成人在线视频| 中文字幕av一区二区三区谷原希美| 大胆人体色综合| 欧美一级大片在线免费观看| 欧美插天视频在线播放| 日本电影亚洲天堂| 国产91久久婷婷一区二区| 国产日韩欧美日韩| 九九精品视频在线| 久久99精品视频一区97| 亚洲欧洲一区二区三区久久| 一区二区av在线| 国产精品永久免费在线| 精品免费在线观看| 97免费视频在线播放| 欧美大片网站在线观看| 最近2019年手机中文字幕| 国产精品视频xxxx| 欧美激情第一页xxx| 日韩欧美在线视频日韩欧美在线视频| 国产欧美在线看| 国产精品va在线| 亚洲高清久久久久久| 欧美自拍视频在线观看| 欧美精品在线播放| 久久频这里精品99香蕉| 国产91精品不卡视频| 亚洲国产精彩中文乱码av| 日韩激情片免费| 国产成+人+综合+亚洲欧美丁香花| 亚洲精品av在线播放| 欧美日韩一区免费| 伊人久久综合97精品| 日韩精品欧美国产精品忘忧草| 91国语精品自产拍在线观看性色| 国产亚洲视频在线| 久久久国产一区| 亚洲欧美日韩第一区| 精品视频久久久久久| 992tv成人免费影院| 日韩网站免费观看高清| 欧美色视频日本高清在线观看| 亚洲美女喷白浆| 久久久人成影片一区二区三区观看| 亚洲国产欧美一区| 国产精品电影在线观看| 欧美夫妻性生活xx| 成人淫片在线看| 国产主播欧美精品| 97色在线视频| 久久久亚洲精品视频| …久久精品99久久香蕉国产| 欧美一区二区三区精品电影| 57pao国产精品一区| 成人国产亚洲精品a区天堂华泰| 欧美在线观看日本一区| 日韩一区二区欧美| 欧美在线性视频| 色婷婷综合久久久久中文字幕1| 一本色道久久综合狠狠躁篇的优点| 色综合久久精品亚洲国产| 日本一区二区三区四区视频| 性色av一区二区三区红粉影视| 欧美制服第一页| 欧美中文字幕视频在线观看| 亚洲美女激情视频| 欧美日韩福利视频| 国产精品高精视频免费| 亚洲激情第一页| 国产成人精品一区| 欧美极品美女视频网站在线观看免费| 国产日韩欧美日韩| 国产裸体写真av一区二区| 欧美色欧美亚洲高清在线视频| 亚洲变态欧美另类捆绑| 播播国产欧美激情| 久久久久久久一区二区| 亚洲人成电影网站色www| 88国产精品欧美一区二区三区| 91高清视频在线免费观看| 国产精品一区二区在线| 久久亚洲精品小早川怜子66| 欧美孕妇性xx| 国产乱人伦真实精品视频| 亚洲免费伊人电影在线观看av| 亚洲的天堂在线中文字幕| 亚洲人成电影在线播放| 国产成人精品久久二区二区91| 伊人久久久久久久久久久| 国产亚洲精品美女| 欧美最顶级丰满的aⅴ艳星| 91丨九色丨国产在线| 欧洲永久精品大片ww免费漫画| 成人黄色生活片| 色婷婷**av毛片一区| 亚洲黄色av网站| 日韩av不卡在线| 久久亚洲欧美日韩精品专区| 亚洲va电影大全| 亚洲午夜未满十八勿入免费观看全集| 精品久久久视频| 国产日韩欧美中文| 精品国产91久久久久久老师| 欧美高清视频免费观看| 日韩国产中文字幕| 亚洲天堂av在线免费| 国产精品91一区| 欧美日韩国产成人| 久久久国产一区二区三区| 亚洲高清不卡av| 国产视频综合在线| 亚洲精品v欧美精品v日韩精品| 日韩视频―中文字幕| 日韩综合视频在线观看| 欧美激情视频给我|