" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)套接字發(fā)送接收數(shù)據(jù)

 更新時(shí)間:2021年11月25日 15:19:40   作者:普通還不自信的程序員  
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)套接字發(fā)送接收數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#實(shí)現(xiàn)套接字發(fā)送接收數(shù)據(jù)的具體代碼,供大家參考,具體內(nèi)容如下

服務(wù)端

namespace TestServer
{
    public partial class ServerForm : Form
    {
        Socket socketSend;
        // 將遠(yuǎn)程連接的客戶端的IP地址和socket存入集合
        Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
        public ServerForm()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                // 當(dāng)點(diǎn)擊開(kāi)始監(jiān)聽(tīng)后,在服務(wù)器創(chuàng)建一個(gè)負(fù)責(zé)監(jiān)聽(tīng)I(yíng)P地址和端口號(hào)的socket
                Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ip = IPAddress.Any;//;IPAddress.Parse(txtServer.Text)
                IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
                // 監(jiān)聽(tīng)
                socketWatch.Bind(point);
                ShowMsg("監(jiān)聽(tīng)成功");
                socketWatch.Listen(10);
                Thread th = new Thread(Listen);
                th.IsBackground = true;
                th.Start(socketWatch);
            }
            catch { }
        }

        void Listen(object o)
        {
            // 等待客戶端連接 并創(chuàng)建一個(gè)負(fù)責(zé)通信的Socket
            Socket socketWatch = o as Socket;
            while (true)
            {
                socketSend = socketWatch.Accept();
                dicSocket.Add(socketSend.RemoteEndPoint.ToString(),socketSend);
                cboUsers.Items.Add(socketSend.RemoteEndPoint.ToString());
                ShowMsg(socketSend.RemoteEndPoint.ToString() + " : " + "連接成功");
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);
            }
        }
        
        void Recive(object o)
        {
            socketSend = o as Socket;
            while (true)
            {
                // 客戶端連接成功后,服務(wù)器應(yīng)接受客戶端發(fā)來(lái)的消息
                byte[] buffer = new byte[1024 * 1024 * 2];
                // 實(shí)際接收到的有效字節(jié)數(shù)
                int r = socketSend.Receive(buffer);
                if (r == 0)
                {
                    break;
                }
                string str = Encoding.UTF8.GetString(buffer, 0, r);
                ShowMsg(socketSend.RemoteEndPoint + " : " + str);
            }
        }

        

        void ShowMsg(string str)
        {
            txtLog.AppendText(str + "\r\n");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string str = txtMsg.Text;
            byte[] buffer = Encoding.UTF8.GetBytes(str);
            string ip = cboUsers.SelectedItem.ToString();
            dicSocket[ip].Send(buffer);
            //socketSend.Send(buffer);
            txtMsg.Text = "";
        }

        private void btnSendUser_Click(object sender, EventArgs e)
        {
            string json = JsonConvert.SerializeObject(UserList());
            byte[] buffer = Encoding.UTF8.GetBytes(json);
            socketSend.Send(buffer);
        }

        private List<User> UserList()
        {
            List<User> userList = new List<User>();
            User user = null;
            string sql = "select * from user_table";
            SqlCommand cmd = SqlUtils.ConnectSql(sql);
            SqlDataReader sdr = cmd.ExecuteReader();
            while (sdr.Read())
            {
                user = new User(sdr.GetInt32(0), sdr.GetString(1), sdr.GetString(2), sdr.GetInt32(3));
                userList.Add(user);
            }
            return userList;
        }

    }
}

客戶端

namespace TestClient
{
    public partial class ClientForm : Form
    {
        Socket socketSend;
        public ClientForm()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                // 創(chuàng)建負(fù)責(zé)通信的socket
                socketSend = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
                IPAddress ip = IPAddress.Parse(txtServer.Text);
                IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));
                socketSend.Connect(point);
                ShowMsg("連接成功");
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start();
            }
            catch { }
        }

        void Recive()
        {
            while (true)
            {
                // 客戶端連接成功后,服務(wù)器應(yīng)接受客戶端發(fā)來(lái)的消息
                byte[] buffer = new byte[1024 * 1024 * 2];
                // 實(shí)際接收到的有效字節(jié)數(shù)
                int r = socketSend.Receive(buffer);
                if (r == 0)
                {
                    break;
                }
                string str = Encoding.UTF8.GetString(buffer, 0, r);
                ShowMsg(socketSend.RemoteEndPoint + " : " + str);
            }
        }

        void ShowMsg(string str)
        {
            txtLog.AppendText(str + "\r\n");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string str = txtMsg.Text.Trim();
            byte[] buffer = Encoding.UTF8.GetBytes(str);
            socketSend.Send(buffer);
            txtMsg.Text = "";
        }
    }
}

效果

發(fā)送json數(shù)據(jù)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Unity使用多態(tài)制作計(jì)算器功能

    Unity使用多態(tài)制作計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Unity使用多態(tài)制作計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 一些C#常見(jiàn)面試題目以及答案總結(jié)

    一些C#常見(jiàn)面試題目以及答案總結(jié)

    這篇文章主要介紹了C#常見(jiàn)面試題目以及答案的相關(guān)資料,分別是C#編程語(yǔ)言中的委托、多線程、事件、異常處理、異步編程、LINQ、內(nèi)存管理、圖像處理、內(nèi)存管理、設(shè)計(jì)模式等概念和實(shí)現(xiàn)方法,需要的朋友可以參考下
    2025-03-03
  • C# BeginInvoke實(shí)現(xiàn)異步編程方式

    C# BeginInvoke實(shí)現(xiàn)異步編程方式

    這篇文章主要介紹了C# BeginInvoke實(shí)現(xiàn)異步編程方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C#函數(shù)out多個(gè)返回值問(wèn)題

    C#函數(shù)out多個(gè)返回值問(wèn)題

    這篇文章主要介紹了C#函數(shù)out多個(gè)返回值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C# 9 新特性——record的相關(guān)總結(jié)

    C# 9 新特性——record的相關(guān)總結(jié)

    這篇文章主要介紹了C# 9 新特性——record的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c# 9的新特性,感興趣的朋友可以了解下
    2021-02-02
  • 詳解WPF的InkCanvas選擇模式

    詳解WPF的InkCanvas選擇模式

    這篇文章主要介紹了WPF InkCanvas選擇模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c# wpf,感興趣的朋友可以了解下
    2021-04-04
  • C# 如何判斷兩個(gè)文件內(nèi)容是否相同的方法

    C# 如何判斷兩個(gè)文件內(nèi)容是否相同的方法

    使用System.security.Cryptography.HashAlgorithm類為每個(gè)文件生成一個(gè)哈希碼,然后比較兩個(gè)哈希碼是否相同
    2013-05-05
  • C# Console類的具體用法

    C# Console類的具體用法

    這篇文章主要介紹C# Console類的具體用法,需要的朋友可以參考下
    2013-03-03
  • C#獲取動(dòng)態(tài)生成的CheckBox值

    C#獲取動(dòng)態(tài)生成的CheckBox值

    checkbox是VS2012的常用控件之一,可以方便的為某些功能取消或啟用,下面教你如何簡(jiǎn)單使用checkbox。本文通過(guò)兩種方法給大家介紹,需要的朋友一起看看吧
    2015-09-09
  • c#基于NVelocity實(shí)現(xiàn)代碼生成

    c#基于NVelocity實(shí)現(xiàn)代碼生成

    這篇文章主要介紹了c#基于NVelocity實(shí)現(xiàn)代碼生成的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01

最新評(píng)論

东源县| 万安县| 永胜县| 晋州市| 吴旗县| 桃园县| 禄丰县| 敦化市| 玉树县| 金坛市| 鹤峰县| 高淳县| 开封县| 青川县| 兴和县| 监利县| 孟津县| 潢川县| 凤凰县| 临夏县| 米脂县| 信丰县| 宁德市| 濉溪县| 洛浦县| 漠河县| 和田市| 宣汉县| 炉霍县| 竹山县| 偏关县| 达尔| 佛山市| 新郑市| 湟中县| 桂阳县| 广西| 鹿邑县| 墨脱县| 百色市| 静乐县|