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

首頁 > 編程 > C# > 正文

基于UDP、TCP協議的C#網絡編程

2023-05-12 12:29:37
字體:
來源:轉載
供稿:網友

與UDP不同,基于TCP協議的編程的服務器端有一個監聽對象:TcpListener,它負責監聽來自客戶端的消息并處理,并且必須在保持連接的情況下與客戶端保持互動,下面舉個例子來說明這個問題。

 示例一:基于TCP協議的網絡編程

窗體:

  Form2做為本程序的服務器端,當按下Start后,啟動服務,剩下的是一個Form1,我啟動了兩次,都連接到Form2,當在Form1的Send欄里寫入小寫字母并按下Send按鈕后,將該字符串發送至Form2,同時Form2將該字符串轉換為大寫,返回給發送者,說明完畢,出個謎語,誰知道兩個Form1里字母是啥意思?

       Form2:(服務器端)

public partial class Form2 : Form
    {

        //聲明監聽對象
        private TcpListener tl;

        //聲明網絡流
        private NetworkStream ns;
        public Form1()
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();           
        }

        private void btnStart_Click(object sender, EventArgs e)
        {

            //開啟8888端口的監聽
            tl = new TcpListener(8888);
            tl.Start();

            //開啟線程
            Thread th = new Thread(new ThreadStart(listen));
            th.IsBackground = true;
            th.Start();
        }
        private void listen()
                 
            while (true)
             

                //獲得響應的Socket
                Socket sock = tl.AcceptSocket();  

                //通過該Socket實例化網絡流           
                ns = new NetworkStream(sock);

                //ClientTcp是添加的類,下面會做說明
                ClientTcp ct = new ClientTcp(ns);

                //ct_MyEvent方法注冊ClientTcp類的MyEvent事件
                ct.MyEvent += new MyDelegate(ct_MyEvent);

                //開啟線程
                Thread th = new Thread(new ThreadStart(ct.TcpThread));
                th.IsBackground = true;
                th.Start();
            }
        }

        void ct_MyEvent(string temp)
        {

            //設置服務器端TextBox的值
            this.textBox1.Text = temp;
        }
    }

 

       Form1:(客戶端)

 

public partial class Form1 : Form
    {

        //聲明Tcp客戶端
        private TcpClient tc;

        //聲明網絡流
        private NetworkStream ns;
        public Form1()
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {

            //注冊本機8888端口
            tc = new TcpClient("localhost",8888);

            //實例化網絡流對象
            ns = tc.GetStream();
            string temp = this.textBox1.Text;

            StreamWriter sw = new StreamWriter(ns);
            StreamReader sr = new StreamReader(ns);

            //將TextBox1的值傳給服務器端
            sw.WriteLine(temp);
            sw.Flush();

            //接收服務器端回傳的字符串
            string str = sr.ReadLine();
            this.textBox2.Text = str;
            sr.Close();
            sw.Close();
        }
    }

 

       ClientTcp類:

    //聲明一個需要一個字符串參數的委托

    public delegate void MyDelegate(string temp);
    class ClientTcp
    {

        //設置網絡流局部對象
        private NetworkStream ns;

        //聲明類型為MyDelegate的事件MyEvent
        public event MyDelegate MyEvent;

        //構造函數中接收參數以初始化
        public ClientTcp(NetworkStream ns)
        {
            this.ns = ns;
        }

        //服務器端線程所調用的方法
        public void TcpThread()
        {

            //獲得相關的封裝流
            StreamReader sr = new StreamReader(ns);
            string temp = sr.ReadLine();

            //接收到客戶端消息后觸發事件將消息回傳
            MyEvent(temp);
            StreamWriter sw = new StreamWriter(ns);

            //轉換為大寫后發送消息給客戶端
            sw.WriteLine(temp.ToUpper());
            sw.Flush();
            sw.Close();
            sr.Close();
        }
    }

這里說下為什么需要ClientTcp這么個類,說這個之前,先說一下為什么服務器端需要開啟一個新的線程來監控端口,這個原因比較簡單,Socket sock = tl.AcceptSocket();  這個方法會造成阻塞,也就是說如果沒有得到客戶端的響應,TcpListenr將一直監聽下去,這就會造成程序的假死,因此我們需要單獨開一個線程來監聽我們的8888端口,我們觀察服務器端(Form2)可以看出,NetworkStream是一個全局變量(實際上局部與全局都是一樣),如果CPU忙的過來,直接把ClientTcp里的方法拿到Form2里寫沒問題,但是一旦客戶端過多造成數據擁擠,那很可能當運算還未結束,NetworkStream就已經換人了,因此當我們取得某客戶端對應的NetworkStream后,應該考慮立刻將它封裝到一個類中,再在該類中再對該NetworkStream做相應的操作,ClientTcp這個類就是為這個設計的,而當封裝了NetworkStream后,我們發現從客戶端傳過來的值是我們需要的,因此就用到了事件的回調,這個我前面有篇文章里講過了,見http://blog.sina.com.cn/u/4c459776010008ws,基于TCP協議的網絡編程基礎的東西就這些,寫法很固定,但是需要很多的技巧,前幾天試著寫一個聊天室程序,差點沒吐血,果然不是一般的麻煩。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91在线高潮白浆在线观看| 欧美成人黑人xx视频免费观看| 亚洲欧美变态国产另类| 亚洲第一精品夜夜躁人人躁| 亚洲网站视频福利| 亚洲欧美激情四射在线日| 国产视频精品一区二区三区| 欧美日韩加勒比精品一区| 国产精品久久电影观看| 日韩精品视频免费专区在线播放| 亚洲人成人99网站| 日韩精品日韩在线观看| 亚洲白虎美女被爆操| 国产啪精品视频| 久久伊人91精品综合网站| 精品视频9999| 久久综合免费视频影院| 一区二区三区 在线观看视| 色先锋久久影院av| 欧美精品精品精品精品免费| 国产999精品久久久| 日韩欧美国产视频| 综合激情国产一区| 日本视频久久久| 亚洲欧美自拍一区| 九九热精品视频国产| 久久久天堂国产精品女人| 亚洲性av网站| 国产一区私人高清影院| 久久久久久国产免费| 57pao国产成人免费| 亚洲最大的免费| 欧美激情视频给我| 中文字幕欧美日韩va免费视频| 91精品成人久久| 91精品国产九九九久久久亚洲| 亚洲人成在线免费观看| 亚洲男人天堂2023| 久久亚洲欧美日韩精品专区| 成人免费观看网址| 精品福利视频导航| 国产美女扒开尿口久久久| 久久国产加勒比精品无码| 欧美激情高清视频| 国产一区二区三区在线免费观看| 国产精品一区二区三区在线播放| 国产精品爽爽爽爽爽爽在线观看| 成人黄色免费在线观看| 欧美日韩在线视频首页| 91精品国产综合久久久久久蜜臀| 久久高清视频免费| 亚洲激情免费观看| 中文在线资源观看视频网站免费不卡| 午夜精品久久久久久久白皮肤| 日韩大陆欧美高清视频区| 久久亚洲精品一区| 中文字幕国产亚洲2019| 黄色成人在线免费| 亚洲欧美日韩天堂一区二区| 亚洲电影免费观看高清完整版在线观看| 国产97在线视频| 日韩在线资源网| 国产精品中文字幕在线| 欧美日韩激情小视频| 68精品国产免费久久久久久婷婷| 精品成人av一区| 91日本在线视频| 国产午夜精品视频| 在线观看国产成人av片| 亚洲欧美中文字幕| 日韩国产高清污视频在线观看| 菠萝蜜影院一区二区免费| 亚洲国产一区二区三区四区| 在线观看日韩欧美| 亚洲加勒比久久88色综合| 欧美成人国产va精品日本一级| 成人免费淫片视频软件| 欧美成人免费在线视频| 欧美午夜片在线免费观看| 欧美日韩成人在线观看| 久久久精品欧美| 免费99精品国产自在在线| 国产精品久久久久久久久免费看| 欧美xxxx做受欧美.88| 欧美精品www| 在线观看欧美日韩国产| 久久精品久久久久| 精品福利视频导航| 欧美激情视频网| 亚洲精品一区二区三区婷婷月| 欧美亚州一区二区三区| 欧美日韩国产中文精品字幕自在自线| 中文字幕av一区二区三区谷原希美| 国产精品高清在线观看| 精品国内产的精品视频在线观看| 亚洲成人av在线播放| 国产盗摄xxxx视频xxx69| 国产视频精品xxxx| 成人在线免费观看视视频| 国产精品久久久久久久久影视| 亚洲91精品在线观看| 日韩欧美一区视频| 亚洲美女又黄又爽在线观看| 亚洲一区二区三区四区在线播放| 国产精品一区二区3区| 亚洲福利在线视频| 国产成人免费av| 国产精品久久久久久久av大片| 国产精品美女免费| 久久频这里精品99香蕉| 国产精品com| 日韩精品在线观看一区二区| 国内精品久久久久影院 日本资源| 日韩中文字幕在线免费观看| 国产脚交av在线一区二区| 91丨九色丨国产在线| 欧美色视频日本高清在线观看| 欧美精品免费在线| 国产成人综合久久| 欧美理论电影在线播放| 精品人伦一区二区三区蜜桃免费| 欧美另类69精品久久久久9999| 中文字幕自拍vr一区二区三区| 清纯唯美亚洲综合| 欧美日韩国产页| 懂色av一区二区三区| 亚洲精品在线观看www| 午夜精品视频网站| 亚洲天堂av在线免费| 欧美大全免费观看电视剧大泉洋| 日韩在线观看精品| 成人久久久久久久| 日本人成精品视频在线| 91豆花精品一区| 久久成人国产精品| 国产视频观看一区| 亚洲精品xxxx| 91麻豆国产精品| 欧美激情视频免费观看| 美女精品视频一区| 国产日韩欧美电影在线观看| 欧美日韩第一页| 久久久黄色av| 国产一区二区久久精品| 欧美有码在线观看视频| 91免费精品国偷自产在线| 中文字幕日韩精品在线| 日韩黄色高清视频| 国产精品久久久久免费a∨| 性亚洲最疯狂xxxx高清| 久久91亚洲人成电影网站| 欧美午夜久久久| 成人h片在线播放免费网站| 国内精品视频一区| 欧美日韩国产精品一区| 国产日韩在线免费| 亚洲а∨天堂久久精品喷水| 粉嫩老牛aⅴ一区二区三区| 日韩欧美一区二区三区| 在线观看中文字幕亚洲| 欧美精品一区二区三区国产精品| 国产91色在线|免| 欧美大码xxxx| 国产成人精品久久二区二区91|