亚洲香蕉成人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
久久精品这里热有精品| 日韩视频亚洲视频| 日韩成人中文字幕在线观看| 狠狠操狠狠色综合网| 91免费人成网站在线观看18| 97人人爽人人喊人人模波多| 欧美精品久久一区二区| 亚洲跨种族黑人xxx| 日本欧美黄网站| 亚洲成人网久久久| 久久久国产精品x99av| 国产精品高潮呻吟久久av野狼| 亚洲最大的av网站| 亚洲国产精品高清久久久| 91精品国产自产在线观看永久| 午夜精品在线观看| 中日韩午夜理伦电影免费| 欧美精品生活片| 九九热99久久久国产盗摄| 国产成+人+综合+亚洲欧洲| 97国产真实伦对白精彩视频8| 韩国国内大量揄拍精品视频| 亚洲美腿欧美激情另类| 亚洲欧美激情另类校园| 91香蕉亚洲精品| 在线观看国产成人av片| 精品国产乱码久久久久久婷婷| 欧美性猛xxx| 久久天天躁狠狠躁夜夜躁2014| 国产成人a亚洲精品| 国产精品久久久久久久久影视| 丝袜情趣国产精品| 国产91精品高潮白浆喷水| 精品无人区乱码1区2区3区在线| 欧美精品videosex性欧美| 久久久久久香蕉网| 欧美肥臀大乳一区二区免费视频| 日韩视频亚洲视频| 国产精品久久久久高潮| 国产精品视频精品视频| 亚洲国产精品久久久久秋霞蜜臀| 色偷偷偷综合中文字幕;dd| 国产精品精品视频| 欧美激情二区三区| 欧美精品在线免费观看| 日韩高清免费观看| 91经典在线视频| 亚洲国产日韩欧美综合久久| 欧美日韩国产va另类| 亚洲人精选亚洲人成在线| 久久夜色精品国产亚洲aⅴ| 久久久www成人免费精品张筱雨| 午夜美女久久久久爽久久| 欧美日韩在线第一页| 久久久久国产精品免费| 成人黄色短视频在线观看| 国产精品青草久久久久福利99| 亚洲色图国产精品| 欧美视频在线观看免费网址| 91亚洲精品在线观看| 精品久久久久久中文字幕大豆网| 久久久久999| 九色91av视频| 夜夜嗨av一区二区三区免费区| 日韩欧美成人区| 欧美黑人视频一区| 精品久久香蕉国产线看观看gif| 欧美噜噜久久久xxx| 国产精品日韩欧美大师| 国产经典一区二区| 久久精品国产69国产精品亚洲| 亚洲最新视频在线| 久久精品视频播放| 欧美亚洲国产视频小说| 久久精品国产免费观看| 久久亚洲精品毛片| 亚洲男人的天堂网站| 国产亚洲成av人片在线观看桃| 精品女厕一区二区三区| 久久国产精品久久久久久久久久| 日韩欧美在线免费观看| www高清在线视频日韩欧美| 日韩精品在线视频观看| 久久在线免费视频| 国外成人在线视频| 国产精品1234| 欧美三级欧美成人高清www| 色综合男人天堂| 456国产精品| 国产精品一区=区| 欧美肥老太性生活视频| 亚洲黄色在线观看| 亚洲国产日韩欧美在线图片| 4k岛国日韩精品**专区| 97成人精品视频在线观看| 国产精品视频网| 亚洲精品欧美日韩| 91在线观看免费高清完整版在线观看| 91tv亚洲精品香蕉国产一区7ujn| 国产精品福利无圣光在线一区| 国产精品日韩在线播放| 日韩欧美视频一区二区三区| 色婷婷综合成人av| 亚洲视频一区二区| 国产精品999999| 国产精品青青在线观看爽香蕉| 欧美性受xxxx黑人猛交| 超碰精品一区二区三区乱码| 97免费中文视频在线观看| 色偷偷av一区二区三区乱| 欧美另类极品videosbestfree| 亚洲japanese制服美女| 国产精品老女人精品视频| 日本精品视频在线观看| 日韩综合中文字幕| 国产一级揄自揄精品视频| 欧美日韩国产色视频| 国产日韩在线一区| 色综合伊人色综合网| 91po在线观看91精品国产性色| 国产精品美女无圣光视频| 亚洲娇小xxxx欧美娇小| 亚洲乱码国产乱码精品精天堂| 成人免费福利视频| 亚洲最新av在线网站| 欧美精品激情在线观看| 91九色精品视频| 欧美多人爱爱视频网站| 国产日本欧美一区二区三区在线| 91色在线视频| 国产91ⅴ在线精品免费观看| 久久久999国产精品| 综合久久五月天| 日本精品一区二区三区在线播放视频| 成人久久久久久久| 2019国产精品自在线拍国产不卡| 热门国产精品亚洲第一区在线| 欧美日韩一区二区三区| 亚洲激情免费观看| 欧美中文在线视频| 日韩一区二区精品视频| 欧美精品一区二区三区国产精品| 欧美国产极速在线| 国产日产亚洲精品| 亚洲美女在线视频| 欧美国产亚洲视频| 国产999精品视频| 欧美专区国产专区| 欧美在线激情视频| 97人人模人人爽人人喊中文字| 国产精品久久一区| 国产精品爽爽ⅴa在线观看| 国产欧美日韩免费看aⅴ视频| 色综合亚洲精品激情狠狠| 国产成人精品久久久| 成人国内精品久久久久一区| 日韩精品视频在线| 久久网福利资源网站| 77777少妇光屁股久久一区| 日韩激情av在线免费观看| 久久久久久久久国产| 日韩资源在线观看| 欧美日韩国产综合新一区| 不卡av日日日|