


Ausführliche Erläuterung des Beispielcodes zur Implementierung der UDP-Protokollkommunikation mithilfe des Sockets von C#
In diesem Artikel wird hauptsächlich der Beispielcode von C#s Socket zur Implementierung der UDP-Protokollkommunikation vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor, um einen Blick darauf zu werfen.
Ich habe heute ein wenig Zeit damit verbracht, die UDP-Kommunikation mit dem Socket von C# zu überprüfen und damit den Grundstein für ein verteiltes Kommunikationssimulationssystem mit UDP zu legen. Wie wir alle wissen, ist UDP das User Datagram Protocol, das die vierte Schicht des Internet-Referenzmodells ist – die Transportschicht. Auf derselben Ebene wie das TCP-Protokoll stellen beide Informationsübertragungsdienste bereit. Der größte Unterschied zu TCP besteht jedoch darin, dass es sich um eine verbindungslose und unzuverlässige Informationsübertragung handelt.
Was ist Unzuverlässigkeit ohne Verbindung? Um es ganz klar auszudrücken: Wenn Sie Daten senden, senden Sie einfach das UDP-Paket an das Netzwerk. Es spielt keine Rolle, ob es beim Empfang von Daten ein UDP-Paket sendet Sammeln Sie sie alle ein und sehen Sie dann, wer sie gesendet hat, nachdem Sie sie abgeholt haben. Im Vergleich zu TCP ist keine Reihe von Prozessen wie Handshake zum Herstellen einer Verbindung, Aufrechterhalten der Verbindung und Freigeben der Verbindung erforderlich, sodass die Vorteile eines geringen Ressourcenverbrauchs und einer schnellen Verarbeitungsgeschwindigkeit bestehen. Nachdem ich nun viel Unsinn gesagt habe, fangen wir an, darüber zu sprechen, wie man Socket in C# für die UDP-Kommunikation verwendet. TCP- und UDP-Anwendungen können über die Klassen TCPClient, TCPListener und UDPClient Bei UDP-Anwendungen gibt es keinen Unterschied mehr zwischen einem echten Server und einem Client im engeren Sinne. Die Endpunkte sind alle gleich, Sie müssen also nur ein Programm schreiben, um zu kommunizieren. Die wichtigsten Teile des Codes und der Beschreibung sind unten aufgeführt: Wichtige globale Variablenprivate 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"); }
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Beispielcodes zur Implementierung der UDP-Protokollkommunikation mithilfe des Sockets von C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

Leitfaden zu Primzahlen in C#. Hier besprechen wir die Einführung und Beispiele von Primzahlen in C# sowie die Codeimplementierung.

Leitfaden zur Fakultät in C#. Hier diskutieren wir die Einführung in die Fakultät in C# zusammen mit verschiedenen Beispielen und Code-Implementierungen.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.
