C#のSocketを利用してUDPプロトコル通信を実装するサンプルコードを詳しく解説
この記事では主に C# ソケット実装 UDP プロトコル通信のサンプルコードを紹介しますが、編集者が非常に良いと思ったので、参考として共有させていただきます。編集者をフォローして見てみましょう
今日は、C# の Socket を使用した UDP 通信を検証し、将来の UDP を使用した分散通信シミュレーション システムの基礎を築きました。ご存知のとおり、UDP はユーザー データグラム プロトコルであり、インターネット参照モデル の 4 番目の層であるトランスポート層です。どちらも TCP プロトコルと同じ層で情報伝送サービスを提供しますが、TCP との最大の違いは、コネクションレスで信頼性の低い情報伝送であることです。
コネクションレスで信頼性が低いとは何ですか?端的に言えば、データを送信するときは、UDP パケットをネットワークに投げるだけで済みます。データを受信するときは、ローカルに送信された UDP パケットがあれば受信されます。すべてを集めて、集めた後に誰が送ったかを確認してください。 TCPと比べて、ハンドシェイクによるコネクション確立、コネクション維持、コネクション解放といった一連の処理が必要ないため、リソース消費が少なく、処理速度が速いというメリットがあります。 さて、くだらない話をたくさんしたので、UDP 通信に C# で Socket を使用する方法について話始めましょう。 TCP および UDP アプリケーションは、TCPClient、TCPListener、および UDPClient クラスを通じてプログラムできます。これらのプロトコル クラスも System.Net.Sockets.Socket クラスに基づいており、データ送信の詳細を気にする必要はありません。ただし、Socket プログラミングをより深く理解するために、UDP 通信プログラミングには Socket クラスが依然として使用されています。UDP アプリケーションでは、厳密な意味での実際のサーバーとクライアントの区別はなくなりました。そのため、通信するためのプログラムを作成するだけで済みます。
コードの重要な部分と説明を以下に示します: 主要なグローバル変数private IPEndPoint ipLocalPoint; private EndPoint RemotePoint; private Socket mySocket; private bool RunningFlag = false;
private string getIPAddress() { // 获得本机局域网IP地址 IPAddress[] AddressList = Dns.GetHostByName(Dns.GetHostName()).AddressList; if (AddressList.Length < 1) { return ""; } return AddressList[0].ToString(); }
private int getValidPort(string port) { int lport; //测试端口号是否有效 try { //是否为空 if (port == "") { throw new ArgumentException( "端口号无效,不能启动DUP"); } lport = System.Convert.ToInt32(port); } catch (Exception e) { //ArgumentException, //FormatException, //OverflowException Console.WriteLine("无效的端口号:" + e.ToString()); this.tbMsg.AppendText("无效的端口号:" + e.ToString() + "\n"); return -1; } return lport; } private IPAddress getValidIP(string ip) { IPAddress lip = null; //测试IP是否有效 try { //是否为空 if (!IPAddress.TryParse(ip, out lip)) { throw new ArgumentException( "IP无效,不能启动DUP"); } } catch (Exception e) { //ArgumentException, //FormatException, //OverflowException Console.WriteLine("无效的IP:" + e.ToString()); this.tbMsg.AppendText("无效的IP:" + e.ToString() + "\n"); return null; } return lip; }
//得到本机IP,设置UDP端口号 ip = getValidIP(tbLocalIP.Text); port = getValidPort(tbLocalPort.Text); ipLocalPoint = new IPEndPoint(ip, port); //定义网络类型,数据连接类型和网络协议UDP mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 mySocket.Bind(ipLocalPoint); //得到客户机IP ip = getValidIP(tbRemoteIP.Text); port = getValidPort(tbRemotePort.Text); IPEndPoint ipep = new IPEndPoint(ip, port); RemotePoint = (EndPoint)(ipep); //启动一个新的线程,执行方法this.ReceiveHandle, //以便在一个独立的进程中执行数据接收的操作 RunningFlag = true; Thread thread = new Thread(new ThreadStart(this.ReceiveHandle)); thread.Start();
//定义一个委托 public delegate void MyInvoke(string strRecv); private void ReceiveHandle() { //接收数据处理线程 string msg; byte[] data=new byte[1024]; MyInvoke myI = new MyInvoke(UpdateMsgTextBox); while (RunningFlag) { if (mySocket == null || mySocket.Available < 1) { Thread.Sleep(200); continue; } //跨线程调用控件 //接收UDP数据报,引用参数RemotePoint获得源地址 int rlen = mySocket.ReceiveFrom(data, ref RemotePoint); msg = Encoding.Default.GetString(data, 0, rlen); tbMsg.BeginInvoke(myI, new object[]{RemotePoint.ToString() + " : " + msg}); } } private void btSend_Click(object sender, EventArgs e) { string msg; msg = tbSendMsg.Text; //发送UDP数据包 byte[] data = Encoding.Default.GetBytes(msg); mySocket.SendTo(data, data.Length, SocketFlags.None, RemotePoint); } private void UpdateMsgTextBox(string msg) { //接收数据显示 this.tbMsg.AppendText( msg + "\n"); }
以上がC#のSocketを利用してUDPプロトコル通信を実装するサンプルコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。
