So analysieren Sie das UDP-Protokoll
一、套接字(socket)
套接字socket: ip地址 + port端口号。在TCP/IP协议中,它唯一标识网络通讯中的一个进程。套接字用来描述网络连接的 一对一关系。
TCP/IP协议规定,网络数据流应采用 大端字节序,即 (内存)低地址高字节(数据)。
二、UDP_SOCKET 相关
UDP 协议 ---- 用户数据报协议(面向非连接) --- SOCK_DGRAM
h表示host,n表示network,l表示32位长整数,s表示16位短整数。
IPv4地址格式定义在netinet/in.h中,IPv4地址: sockaddr_in结构体,包括16位端口号和32位IP地址
struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; };
三、UDP socket 实例:
//udp_server.c
#include <stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netinet/in.h> #include<unistd.h> #include<string.h> #include<errno.h> void usage(const char *proc) { printf("%s:[ip][port]\n",proc); } int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } char *_ip=argv[1]; int _port=atoi(argv[2]); int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("socket"); exit(1); } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0) { perror("bind"); exit(2); } int done=0; char buf[1024]; struct sockaddr_in client; socklen_t len=sizeof(client); while(!done) { ssize_t _size=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(_size > 0) { buf[_size]='\0'; printf("[%s : %d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); } else if(_size == 0) { printf("client close...\n"); } else {} } return 0; }
//udp_client.c
#include <stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netinet/in.h> #include<unistd.h> #include<string.h> #include<errno.h> void usage(const char *proc) { printf("%s:[ip][port]\n",proc); } int main(int argc,char *argv[]) { if(argc != 3) { usage(argv[0]); return 1; } char *_ip=argv[1]; int _port=atoi(argv[2]); int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock < 0) { perror("socket"); exit(1); } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(_port); local.sin_addr.s_addr=inet_addr(_ip); if(bind(sock,(struct sockaddr*)&local,sizeof(local)) < 0) { perror("bind"); exit(2); } int done=0; char buf[1024]; struct sockaddr_in client; socklen_t len=sizeof(client); while(!done) { ssize_t _size=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); if(_size > 0) { buf[_size]='\0'; printf("[%s : %d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf); } else if(_size == 0) { printf("client close...\n"); } else {} } return 0; }
运行结果:
Das obige ist der detaillierte Inhalt vonSo analysieren Sie das UDP-Protokoll. 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



Verwendung der PHP- und UDP-Protokolle zur Implementierung asynchroner Kommunikation In modernen Internetanwendungen ist die asynchrone Kommunikation zu einer sehr wichtigen Methode geworden. Durch die Verwendung asynchroner Kommunikation können Benutzeranfragen gleichzeitig verarbeitet werden, ohne den Hauptthread zu blockieren, wodurch die Systemleistung und Reaktionsgeschwindigkeit verbessert werden. Wie kann PHP als beliebte Back-End-Programmiersprache das UDP-Protokoll verwenden, um eine asynchrone Kommunikation zu erreichen? In diesem Artikel wird die Verwendung des UDP-Protokolls in PHP zur Implementierung einer einfachen asynchronen Kommunikation vorgestellt und spezifische Codebeispiele angehängt. 1. Einführung in das UDP-ProtokollU

Gängige UDP-Portnummern sind 53, 69, 161, 2049, 68 und 520. UDP verwendet Portnummern, um eigene Datenübertragungskanäle für verschiedene Anwendungen zu reservieren: 1. Network File System (NFS), die Portnummer ist 2049; 2. Simple Network Management Protocol (SNMP), die Portnummer ist 161; System (DNS), die Portnummer ist 53; 4. Simple File Transfer System (TFTP), die Portnummer ist 69; 5. Dynamic Host Configuration Protocol (DHCP), die Portnummer ist 68; Portnummer ist 520 usw.

UDP (User Datagram Protocol) ist ein leichtes, verbindungsloses Netzwerkprotokoll, das häufig in zeitkritischen Anwendungen verwendet wird. Es ermöglicht Anwendungen, Daten zu senden und zu empfangen, ohne eine TCP-Verbindung herzustellen. Beispiel-Java-Code kann zum Erstellen eines UDP-Servers und -Clients verwendet werden, wobei der Server auf eingehende Datagramme wartet und antwortet und der Client Nachrichten sendet und Antworten empfängt. Mit diesem Code können reale Beispiele wie Chat-Anwendungen oder Datenerfassungssysteme erstellt werden.

1. Socket: Socket: IP-Adresse + Portnummer. Im TCP/IP-Protokoll identifiziert es einen Prozess in der Netzwerkkommunikation eindeutig. Sockets werden verwendet, um eine Eins-zu-Eins-Beziehung zwischen Netzwerkverbindungen zu beschreiben. Das TCP/IP-Protokoll legt fest, dass der Netzwerkdatenfluss die Big-Endian-Bytereihenfolge verwenden sollte, d. h. (Speicher) niedrige Adresse, hohes Byte (Daten). 2. UDP_SOCKET-bezogenes UDP-Protokoll ---- User Datagram Protocol (nicht verbindungsorientiert) --- SOCK_DGRAMh repräsentiert den Host, n repräsentiert das Netzwerk, l repräsentiert eine 32-Bit-lange Ganzzahl und s repräsentiert eine 16-Bit-kurze Ganzzahl. Das IPv4-Adressformat ist in netinet/in.h, IPv4-Adresse: sockadd, definiert

UDP bietet „verbindungslose“ Transportdienste. Der chinesische Name von UDP ist User Datagram Protocol. Es ist ein verbindungsloses Transportschichtprotokoll im OSI-Referenzmodell. Es bietet einfache und unzuverlässige transaktionsorientierte Informationsübertragungsdienste und bietet Anwendungen die Möglichkeit, gekapselte Daten zu senden. IP-Paketmethode.

UDP ist ein verbindungsloses Transportschichtprotokoll, das eine Möglichkeit zum Senden von Datenpaketen an das Netzwerk bietet, jedoch weder die Zuverlässigkeit, Reihenfolge und Integrität von Datenpaketen garantiert noch eine Überlastungskontrolle, Flusskontrolle usw. bietet. Funktion. Eigenschaften von UDP: 1. Keine Konnektivität, keine Notwendigkeit, vor dem Senden von Daten eine Verbindung herzustellen, Datenpakete können direkt an den Zielhost gesendet werden. 2. Hohe Effizienz, der Header-Overhead ist gering, nur 8 Bytes. 3. Unzuverlässigkeit Bietet weder die Zuverlässigkeit von Datenpaketen, noch wird es erneut gesendet, selbst wenn es verloren geht, und es wird auch nicht die Reihenfolge der Datenpakete usw. garantiert.

Grundlegende Einführung in die UDP-Programmierung. Die Kommunikationsklassen DatagramSocket und DatagramPacket [Datenpaket/Datagramm] implementieren Netzwerkprogramme basierend auf dem UDP-Protokoll. UDP-Datagramme werden über den Datagram-Socket DatagramSocket gesendet und empfangen. Das System garantiert nicht, dass das UDP-Datagramm sicher an das Ziel übermittelt wird, und ist auch nicht sicher, wann es ankommt. Das DatagramPacket-Objekt kapselt ein UDP-Datagramm, das die IP-Adresse und Portnummer des Absenders sowie die IP-Adresse und Portnummer des Empfängers enthält. Jedes Datagramm im UDP-Protokoll enthält vollständige Adressinformationen, sodass keine Verbindung zwischen Sender und Empfänger hergestellt werden muss. Die beiden Klassen/Objekte im Kern des Basisprozesses Da

Der Hauptgrund, warum DNS (DomainNameSystem) UDP (UserDatagramProtocol) anstelle von TCP (TransmissionControlProtocol) verwendet, sind Leistungs- und Effizienzüberlegungen. Im Folgenden wird ausführlich erläutert, warum sich DNS für die Verwendung des UDP-Protokolls entscheidet: Kleine Anfragen und schnelle Antworten: Bei DNS-Anfragen handelt es sich in der Regel um kleine Anfragen, die nur wenige Bytes an Datenübertragung erfordern. UDP ist ein verbindungsloses Protokoll, das vor der Kommunikation keinen Verbindungsaufbau erfordert, sondern Pakete an die Zieladresse sendet und auf eine Antwort wartet. Dadurch eignet sich UDP besser für schnelle Antwortszenarien als TCP. Geringe Latenz: DNS-Abfragen erfordern im Allgemeinen eine geringe Latenz, um schnelle Dienste zur Domänennamenauflösung bereitzustellen.
