C# SocketUDP服務器,組播

SocketUDP

自己即是服務器又是客戶端 ,在發消息只需要改成對方ip和端口號即可

前提對方必須開啟服務器 socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.72"), 8080));

控件:Button,TextBox,RichTextBox

打開自己服務器

public Form1()
{InitializeComponent();//1創建一個服務器 綁定的是ip和端口號 192.168.107.83, 8080// 張三的終端 以后誰想跟張三聊的時候 發這個ip和端口號socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);socket.Bind(new IPEndPoint(IPAddress.Any, 8080));startReceive();
}
Socket socket;
void startReceive() 
{byte[] bs = new byte[1024];Task.Run(() =>{while (true){int count = socket.Receive(bs);string s = Encoding.UTF8.GetString(bs,0, count);this.Invoke((Action)(() =>{richTextBox1.AppendText(s + "\t\n");}));}});
}

發送按鈕事件

private void button1_Click(object sender, EventArgs e)
{//發消息的一定要注意iphe端口號socket.SendTo(Encoding.UTF8.GetBytes(this.textBox1.Text),new IPEndPoint(IPAddress.Parse("192.168.107.73"), 8082));
}

Socket組播服務器

組播需要使用組播地址,在 IPv4 中它的范圍從 224.0.0.0 到 239.255.255.255,

并被劃分為局部鏈接多播地址、預留多播地址和管理權限多播地址三類

224.0.0.0 ~ 224.0.0.255: 局部鏈接多播地址:是為路由協議和其它用途保留的地址, ?

只能用于局域網中,路由器是不會轉發的地址 224.0.0.0 不能用,是保留地址 ?

224.0.1.0 ~ 224.0.1.255: 為用戶可用的組播地址(臨時組地址),可以用于 Internet 上的。

224.0.2.0 ~ 238.255.255.255: 用戶可用的組播地址(臨時組地址),全網范圍內有效 ?

239.0.0.0 ~ 239.255.255.255: 為本地管理組播地址,僅在特定的本地范圍內有效

 public Form1(){InitializeComponent();}Socket socket;private void button1_Click(object sender, EventArgs e){//1創建socket對象socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//2 綁定ip和端口號socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8080));//3 加入組播地址//SetSocketOption 添加套接字可配置選項//參數1.支持協議類型,//參數2 添加組播地址的功能//參數3 要組播的地址socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,new MulticastOption(IPAddress.Parse("224.0.0.188")));//4以后大家要是接受的話 接受組內發來的消息的時候 必須添接受組內代碼//5 接收數據startReceive();     
}
void startReceive()
{new Thread(() =>{byte[] buffer = new byte[1024];while (true){int count = socket.Receive(buffer);string s = Encoding.UTF8.GetString(buffer, 0, count);richTextBox1.Invoke((Action)(() =>{richTextBox1.AppendText(s + "\t\n");}));}}).Start();
}//發送消息
private void button2_Click(object sender, EventArgs e)
{//發消息指定組地址進行發送,以后要求接受消息端口號和此處端口號保持一致socket.SendTo(Encoding.UTF8.GetBytes(this.textBox1.Text),new IPEndPoint(IPAddress.Parse("224.0.0.188"), 10086));
}

socket組播客戶端

控件:

兩個按鈕(客戶端打開接收消息,發送),textbox,richtextBox

        public Form1(){InitializeComponent();}Socket socket;private void button1_Click(object sender, EventArgs e){//1創建socket對象socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//2 綁定ip和端口號socket.Bind(new IPEndPoint(IPAddress.Any, 10086));//3 設置組地址 對客戶端加入指定組播地址內socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,new MulticastOption(IPAddress.Parse("224.0.1.188")));//4 接受消息Task.Run(() =>{while (true){byte[] buffer = new byte[1024];//int count = socket.Receive(buffer);EndPoint ip = new IPEndPoint(IPAddress.None, 0); //定義endpoint類型變量,終端類型//ReceiveFrom()接受數據的方法 從哪個終端發來的消息//參數3是發來消息的地址 類型是endpointint count = socket.ReceiveFrom(buffer, 0, ref ip);IPEndPoint i1 = ip as IPEndPoint; // 把endpoint類型 轉成IPEndPointstring s = Encoding.UTF8.GetString(buffer, 0, count);richTextBox1.Invoke((Action)(() =>{richTextBox1.AppendText(i1.Address+":"+s + "\t\n");richTextBox1.SelectionStart=richTextBox1.Text.Length; richTextBox1.ScrollToCaret();}));}});}private void button2_Click(object sender, EventArgs e){//socket.SendTo(Encoding.UTF8.GetBytes("hello world"),//    new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8080));if (Encoding.UTF8.GetBytes(this.textBox1.Text).Length>1024){return;}socket.SendTo(Encoding.UTF8.GetBytes(this.textBox1.Text),new IPEndPoint(IPAddress.Parse("224.0.1.188"), 10086));}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35063.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【操作系統】信號處理與阻塞函數|時序競態問題

🔥博客主頁: 我要成為C領域大神🎥系列專欄:【C核心編程】 【計算機網絡】 【Linux編程】 【操作系統】 ??感謝大家點贊👍收藏?評論?? 本博客致力于知識分享,與更多的人進行學習交流 ? 關于阻塞函數和…

Windows環境部署MySQL_8.4.0 LTS的部署安裝、驗證連接以及卸載全過程實操手冊

前言: 什么是 MySQL MySQL 是一個關系型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬于Oracle 公司。MySQL 是一種關系型數據庫管理系統,關系型數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內&am…

secureCRT中使用python腳本自動化測試vela設備

利用vela設備自帶的wapi命令行,重復執行聯網斷網的命令,測試系統穩定性。 實現如下, # $language "python" # $interface "1.0"# This automatically generated script may need to be # edited in order to work co…

8.12 矢量圖層面要素單一符號使用七(隨機標記填充)

文章目錄 前言隨機標記填充(Random Marker Fill)QGis設置面符號為隨機標記填充(Random Marker Fill)二次開發代碼實現隨機標記填充(Random Marker Fill) 總結 前言 本章介紹矢量圖層線要素單一符號中使用隨…

分班查詢怎么發布?

在現代教育環境中,傳統的學生分班通知方式可能顯得有些過時和低效。通常,這些方式依賴于紙質通知單,這不僅需要大量的物理資源進行打印和分發,而且容易出錯,如丟失、錯誤分發或延遲。 幸運的是,現在有了更高…

掌握Perl并發:線程與進程編程全攻略

掌握Perl并發:線程與進程編程全攻略 引言 Perl作為一種功能強大的編程語言,提供了豐富的并發編程手段。無論是通過threads模塊實現的線程,還是通過fork系統調用產生的進程,Perl都能幫助開發者高效地處理多任務。本文將深入探討如…

解釋Java的垃圾回收機制以及垃圾回收器的工作原理。

Java的垃圾回收機制(Garbage Collection,GC)是Java虛擬機(JVM)的一個重要組成部分,它負責自動管理內存,確保內存泄漏和內存溢出錯誤不會發生。垃圾回收器(Garbage Collector&#xf…

心靈館咨詢系統小程序心理咨詢平臺聊天咨詢

心靈館咨詢系統小程序:解鎖你的心靈密碼 💖 心靈之旅的導航者 在繁忙的現代生活中,我們時常會面臨各種壓力與困惑。心靈館咨詢系統小程序,如同一位貼心的導航者,引領我們探索內心的世界,尋找真正的自我。 …

shell 腳本的部分指令和操作符

終端輸入兩個數,判斷兩數是否相等,如果不相等,判斷大小關系 2.已知網址www.hqyj.com,使用expr截取出www、hqyj、com,不能使用cut,不能出現數字

JavaWeb系列十九: jQuery的DOM操作 上

查找節點, 修改屬性 查找屬性節點: 查找到所需要的元素之后, 可以調用jQuery對象的attr()方法用來 設置/返回 它的各種屬性值 設置屬性值 $(“img”).attr(“width”, “300”);返回屬性值 $(“img”).attr(“width”); 創建節點 創建節點: 使用jQuery的工廠函數$(): $(html標…

硬核實力再亮,玩出夢想科技發布全球首款安卓系統空間計算機

6月25日,玩出夢想科技在新加坡召開全球新品發布會,正式發布全球首款安卓系統空間計算機——玩出夢想MR,填補了空間計算機在安卓生態的空白。 作為品牌沉淀兩年的破曉之作,玩出夢想MR以業內領先軟硬件配置,強大自研算法…

刪除win10未激活水印

通過終止進程來刪除水印 remove.batecho off taskkill /F /IM explorer.exe explorer.exe exit右鍵管理員執行重啟

解決了!暗影精靈8 Pro酷睿版無聲音,揚聲器和麥克風都沒有聲音!

困擾好幾天的問題解決了! 暗影精靈8 Pro酷睿版無聲音,揚聲器和麥克風都沒有聲音!!方法適用于OMEN by HP Gaming Laptop 16-k0xxx(暗影精靈8 Pro酷睿版)的Windows 10聲卡驅動! 朋友們&#xff…

【應用開發一】LED開發

文章目錄 1應用層控制外設的兩種方式2 sysfs和/sys關系3 LED控制方式3.1 基本情況3.2 LED屬性文件介紹3.3 命令行屬性測試3.4 led程序3.5 開發板上測試 1應用層控制外設的兩種方式 使用設備文件控制 在Linux系統下,一切皆是文件。應用層控制底層硬件同樣也是通過文…

如何在 Linux 上安裝 Docker Desktop

如何在 Linux 上安裝 Docker Desktop Docker 是一個用于開發、部署和運行應用程序的開放平臺。Docker Desktop 是 Docker 在 macOS 和 Windows 上的官方客戶端,現在也支持 Linux 系統。本文將詳細介紹如何在 Linux 上安裝 Docker Desktop。 系統要求 在開始安裝之…

第100+12步 ChatGPT學習:R實現KNN分類

基于R 4.2.2版本演示 一、寫在前面 有不少大佬問做機器學習分類能不能用R語言,不想學Python咯。 答曰:可!用GPT或者Kimi轉一下就得了唄。 加上最近也沒啥內容寫了,就幫各位搬運一下吧。 二、R代碼實現KNN分類 (1&a…

【Docker】Consul 和API

目錄 一、Consul 1. 拉取鏡像 2. 啟動第一個consul服務:consul1 3. 查看consul service1 的ip地址 4. 啟動第二個consul服務:consul2, 并加入consul1(使用join命令) 5. 啟動第三個consul服務:consul3&…

攻擊者開始使用 XLL 文件進行攻擊

近期,研究人員發現使用惡意 Microsoft Excel 加載項(XLL)文件發起攻擊的行動有所增加,這項技術的 MITRE ATT&CK 技術項編號為 T1137.006。 這些加載項都是為了使用戶能夠利用高性能函數,為 Excel 工作表提供 API …

【SQL Server數據庫】關系模式與關系代數

目錄 一、請用關系代數完成下列查詢 1. 求 供應工程J1 零件P1的供應商號碼SNO; 2. 求 供應工程J1 零件(P)為紅色 的供應商號碼SNO; 3. 求 沒有使用 天津供應商(P)生產的紅色零件(S&#xff0…