


Linux IPC UDP/IP-Socket-Programmierung: eine effiziente Möglichkeit, Netzwerkkommunikation zu erreichen
Linux-System ist ein Betriebssystem, das die gleichzeitige Ausführung mehrerer Aufgaben unterstützt. Es kann mehrere Prozesse gleichzeitig ausführen und dadurch die Systemauslastung und -effizienz verbessern. Wenn jedoch Datenaustausch und Zusammenarbeit zwischen diesen Prozessen erforderlich sind, müssen einige IPC-Methoden (Inter-Process Communication) verwendet werden, z. B. Signale, Nachrichtenwarteschlangen, gemeinsam genutzter Speicher, Semaphore usw. Unter diesen ist UDP/IP-Socket eine relativ effiziente und flexible IPC-Methode, die es zwei oder mehr Prozessen ermöglicht, Daten über das Netzwerk zu übertragen, ohne sich um die spezifischen Details und Protokolle des Netzwerks zu kümmern.

#include #include #include #include #include //服务器: socket() //创建socket struct sockaddr_in //准备通信地址 bind() //绑定socket和addr sendto()/recvfrom //进行通信 close() //关闭socket //客户端: socket() //创建socket: //准备通信地址:服务器的地址 sendto()/recv() //进行通信: close() //关闭socket:
socket()
//创建网络端点,返回socket文件描述符,失败返回-1设errno int socket(int domain, int type, int protocol);
Domäne: Protokollfamilie (Netzwerkkommunikation (IP) oder lokale Kommunikation (xxx.socket))
-
AF_INET wird verwendet, um das dem IPv4-Netzwerkprotokoll zugewiesene Netzwerkprotokoll zu implementieren
Typ: Protokoll (TCP oder UDP) -
SOCK_DGRAM //Datagramm-Socket, Implementierung umfasst unter anderem das UDP-Protokoll, das eine unzuverlässige, verbindungslose Datagramm-Kommunikationspartei ist
Protokoll: spezielles Protokoll, normalerweise 0
Korrespondenzadresse vorbereiten:
struct sockaddr{ //主要用于函数的形参类型, 很少定义结构体变量使用, 叫做通用的通信地址类型//$man bind sa_family_t sa_family; char sa_data[14]; } struct sockaddr_in{ //准备网络通信的通信地址 //$man in.h sa_family_t sin_family; //协议族, 就是socket()的domain的AF_INET in_port_t sin_port; //端口号 struct in_addr sin_addr; //IP地址, //当前网段的最大ip地址是广播地址,即,xxx.xxx.xxx.255。 //255.255.255.255在所有网段都是广播地址 } struct in_addr{ in_addr_t s_addr; //整数类型的IP地址 }
bind()
//把通信地址和socket文件描述符绑定,用在服务器端,成功返回0,失败返回-1设errno int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd: fd der Socket-Datei (zurückgegeben von socket())
addr: muss in socketaddr_un oder soketaddr_in umgewandelt werden, siehe oben
addrlen: die Größe der Kommunikationsadresse, verwenden Sie sizeof();
sendto()
//向指定的socket和相应的地址发送消息,成功返回实际发送数据的大小,失败返回-1设errno ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
dest_addr: Zieladresse (Empfängerinformationen)
addrlen: Größe der Zieladresse
AHinweis
- send(sockfd, buf, len, flags); entspricht sendto(sockfd, buf, len, flags, NULL, 0);
- recv()/send() bedeutet das Senden und Empfangen von Daten über sockfd, da sockfd vor dem Senden und Empfangen bereits mit der entsprechenden Adresse verbunden ist, sodass nicht angegeben werden muss, wer an wen gesendet und empfangen werden soll, sondern udp muss angegeben werden, da beim Senden und Empfangen keine Verbindung besteht
recvfrom()
//从指定的socket和相应的地址接受消息,并提供来电显示的功能,成功返回实际接收的数据大小, 失败返回-1设errno ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
src_addr: Strukturzeiger, der zum Speichern der Kommunikationsadresse des Datensenders verwendet wird.
addrlen: Zeigertyp, der zum Speichern der Adressgröße des Absenders verwendet wird
- recv(sockfd, buf, len, flags); 等价于 recvfrom(sockfd, buf, len, flags, NULL, 0);
- accept() and recvfrom() 后面的参数是用来提供来电显示的
- 一个server对应多个client
- server可以不知道client的地址, 但是client得知道server的地址
- send data 一定要知道对方地址
- receive data不需要知道对方地址
- TCP/IP的socket都是SOCK_STREAM的,全程连接,通过socket就能找到对方地址, send data的话,直接丢给socket就行
- UDP/IP的socket是SOCK_DGRAM的,不全程连接,不能通过socket找到对方,send data的话,server中需要使用recvfrom()来知道client的地址, 所以肯定要sendto();client本来就知道server的地址, 直接sendto()
- recvfrom()的唯一意义就是在udp-server中配合sendto()使用
- 因为不能通过socket找到对方, 只要是udp发消息, 就得通过sendto()
server | client | |
---|---|---|
TCP/IP | send();recv() | send();recv() |
UDP/IP | recvfrom();sendto() | recv();sendto() |
例子-一对一的upd/ip协议的服务器模型
//udp/ip server 五步走 #include #include #include #include #include #include #include int main(){ //1. 创建socket int sockfd=socket(AF_INET,SOCK_DGRAM,0); if(-1==sockfd) perror("socket"),exit(-1); //2. 准备通信地址 struct sockaddr_in addr; addr.sin_family=AF_INET; addr.sin_port=htons(8888); addr.sin_addr.s_addr=inet_addr("176.43.11.211"); //3. 绑定socket和通信地址 int res=bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)); if(-1==res) perror("bind"),exit(-1); printf("bind success\n"); //4. 进行通信 char buf[100]={0}; struct sockaddr_in recv_addr; //为使用recvfrom得到client地址做准备, 最终为sendto()做准备 socklen_t len=sizeof(recv_addr); res=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&recv_addr,&len); if(-1==res) perror("recvfrom"),exit(-1); char* ip=inet_ntoa(recv_addr.sin_addr); //将recvfrom获得client地址转换成点分十进制字符串 printf("data received from client :%s is:%d\n",ip,res); res=sendto(sockfd,"I received",sizeof("I received"),0,(struct sockaddr*)&recv_addr,len) ;//使用recvfrom获得的client地址 if(-1==res) perror("sendto"),exit(-1); //5. 关闭socket res=close(sockfd); if(-1==res) perror("close"),exit(-1); printf("close success\n"); return 0; } //udp/ip client #include #include #include //close() #include #include #include #include int main(){ int sockfd=socket(AF_INET,SOCK_DGRAM,0); if(-1==sockfd) perror("socket"),exit(-1); printf("create socket succesfully\n"); struct sockaddr_in addr; addr.sin_family=AF_INET; addr.sin_port=htons(8888); addr.sin_addr.s_addr=inet_addr("176.43.11.211"); //这个是server的地址, 虽然没有 connect, which means 不能通过socket找到这个地址, 但是我们还是知道这个地址的, sendto()是可以直接用的 int res=sendto(sockfd,"hello",sizeof("hello"),0,(struct sockaddr*)&addr,sizeof(addr)); if(-1==res) perror("sendto"),exit(-1); printf("data sent size:%d\n",res); char buf[100]={0}; res=recv(sockfd,buf,sizeof(buf),0); if(-1==res) perror("recv"),exit(-1); printf("data received from server:%s\n",buf); res=close(sockfd); if(-1==res) perror("close"),exit(-1); return 0; }
本文介绍了Linux系统中udp/ip socket编程的方法,包括socket的创建、绑定、发送、接收、关闭和设置等方面。通过了解和掌握这些知识,我们可以更好地使用udp/ip socket来实现进程间通信,提高系统的性能和可靠性。当然,Linux系统中udp/ip socket编程还有很多其他的特性和用法,需要我们不断地学习和探索。
Das obige ist der detaillierte Inhalt vonLinux IPC UDP/IP-Socket-Programmierung: eine effiziente Möglichkeit, Netzwerkkommunikation zu erreichen. 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

Deepseek ist ein leistungsstarkes Intelligent -Such- und Analyse -Tool, das zwei Zugriffsmethoden bietet: Webversion und offizielle Website. Die Webversion ist bequem und effizient und kann ohne Installation verwendet werden. Unabhängig davon, ob Einzelpersonen oder Unternehmensnutzer, können sie massive Daten über Deepseek problemlos erhalten und analysieren, um die Arbeitseffizienz zu verbessern, die Entscheidungsfindung zu unterstützen und Innovationen zu fördern.

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

Wie lade ich die BitPie Bitpie Wallet-App herunter? Die Schritte sind wie folgt: Suchen Sie im AppStore (Apple-Geräte) oder Google Play Store (Android-Geräte) nach „BitPie Bitpie Wallet“. Klicken Sie auf die Schaltfläche „Get“ oder „Install“, um die App herunterzuladen. Besuchen Sie für die Computerversion die offizielle BitPie-Wallet-Website und laden Sie das entsprechende Softwarepaket herunter.

Bitget ist eine Kryptowährungsbörse, die eine Vielzahl von Handelsdienstleistungen anbietet, darunter Spot -Handel, Vertragshandel und Derivate. Der 2018 gegründete Austausch hat seinen Hauptsitz in Singapur und verpflichtet sich, den Benutzern eine sichere und zuverlässige Handelsplattform zu bieten. Bitget bietet eine Vielzahl von Handelspaaren, einschließlich BTC/USDT, ETH/USDT und XRP/USDT. Darüber hinaus hat der Austausch einen Ruf für Sicherheit und Liquidität und bietet eine Vielzahl von Funktionen wie Premium -Bestellarten, gehebelter Handel und Kundenunterstützung rund um die Uhr.

Ouyi Okx, die weltweit führende digitale Asset Exchange, hat jetzt ein offizielles Installationspaket gestartet, um ein sicheres und bequemes Handelserlebnis zu bieten. Auf das OKX -Installationspaket von Ouyi muss nicht über einen Browser zugegriffen werden. Der Installationsprozess ist einfach und einfach zu verstehen.

Gate.io ist ein beliebter Kryptowährungsaustausch, den Benutzer verwenden können, indem sie sein Installationspaket herunterladen und auf ihren Geräten installieren. Die Schritte zum Abholen des Installationspakets sind wie folgt: Besuchen Sie die offizielle Website von Gate.io, klicken Sie auf "Download", wählen Sie das entsprechende Betriebssystem (Windows, Mac oder Linux) und laden Sie das Installationspaket auf Ihren Computer herunter. Es wird empfohlen, die Antiviren -Software oder -Firewall während der Installation vorübergehend zu deaktivieren, um eine reibungslose Installation zu gewährleisten. Nach Abschluss muss der Benutzer ein Gate.io -Konto erstellen, um es zu verwenden.

Ouyi, auch bekannt als OKX, ist eine weltweit führende Kryptowährungsplattform. Der Artikel enthält ein Download -Portal für das offizielle Installationspaket von Ouyi, mit dem Benutzer den Ouyi -Client auf verschiedenen Geräten installiert werden können. Dieses Installationspaket unterstützt Windows, Mac, Android und iOS -Systeme. Nach Abschluss der Installation können sich Benutzer registrieren oder sich beim Ouyi -Konto anmelden, Kryptowährungen mit dem Handel mit den von der Plattform erbrachten Diensten anmelden.

Gate.io ist eine hochgelobte Kryptowährungshandelsplattform, die für ihre umfangreiche Token-Auswahl, niedrige Transaktionsgebühren und eine benutzerfreundliche Schnittstelle bekannt ist. Mit seinen fortschrittlichen Sicherheitsfunktionen und dem hervorragenden Kundenservice bietet Gate.io Händlern ein zuverlässiges und bequemes Handelsumfeld für Kryptowährung. Wenn Sie sich mit gate.io anschließen möchten, klicken Sie bitte auf den Link zum Herunterladen des offiziellen Registrierungsinstallationspakets, um Ihre Kryptowährungshandelsreise zu starten.
