当前位置:网站首页>Explication détaillée des fonctions send () et recv () du programme Socket
Explication détaillée des fonctions send () et recv () du programme Socket
2022-04-23 03:16:00 【Tor Pedo】
Tout d'abord,sendPrototype de fonction
ssize_t send (int fd, const void *buf, size_t n, int flags);
ssize_t recv (int fd, void *buf, size_t n, int flags)
fdReprésente la prise à envoyer à,bufPointeur indiquant les données à envoyer,nPour envoyer(Réception)Longueur,flagOui l'identification est généralement définie à0.
1:send() recv()Aperçu du comportement etmemset()L'importance de
send()L'acte debufSélectionnOctets de données envoyés,recv()LirenOctets àbufMoyenne.Il faut faire attention ici.,Ils ont tortbufLa valeur de est détectée,Il est donc préférable de commencer parbufferSet As0,Et réglé au - dessus de chaque réceptionbufferLongueur
Prends une châtaigne.:
//Expéditeur
char buffer[10] = "1234567";
send(fd,buffer,3,0);
//Bénéficiaire
char buffer[10]=“abcdef”;
recv(fd,buffer,3,0);
Une fois l'acceptation terminéebufferÇa devient"123def",Il est impossible de distinguer ce qui est reçu,
Pratique courante:
//Expéditeur
char buffer[10] = "1234567";
send(fd,buffer,3,0);
//Bénéficiaire
char buffer[10]=“abcdef”;
memset(buffer,0,sizeof(buffer));// Laissez tout en blanc
recv(fd,buffer,3,0);
2:send()Fonctions
PoursendFonctions,La valeur de retour est égale à0Indique que la connexion est déconnectée,Moins de0Erreur de représentation,Plus grand que0 Indique le nombre d'octets envoyés avec succès . Cela signifie qu'il est possible que le nombre réel d'octets envoyés soit inférieur à celui de la fonction n(C'estsendLa fonction est terminée, Commencez la prochaine ligne de code ),Si vous voulez vous assurern Tous les octets envoyés ,Besoin d'écrirewhileCycle Déterminer le nombre total d'octets envoyés à chaque fois ( Il est généralement possible d'envoyer tout avec succès ).
Les valeurs de retour des modes de blocage et de non - blocage signifient la même chose .
Mode de blocage: Si la longueur des données à envoyer est inférieure à la taille du tampon restant ,Envoyer directement; Si la longueur des données à envoyer est supérieure au tampon restant ,Alors bloquez, Attendez que le tampon ait fini d'envoyer plusieurs fois avant que l'espace de données ne devienne plus grand que les données à envoyer ,Mettre dans le tampon, Renvoie le nombre d'octets envoyés avec succès ( Peut - être pas tous envoyés avec succès ),0Indique que la connexion est déconnectée,Moins de0Erreur de représentation.
Mode non bloquant: Si la longueur des données à envoyer est inférieure à la taille du tampon restant , Envoyer directement les données de succès retournées ; Erreur retournée si la longueur des données à envoyer est supérieure au tampon restant (Moins de0),0Indique que la connexion est déconnectée,Moins de0Erreur de représentation.
C'est - à - dire que les modes de blocage et de non - blocage sont différents , Leurs valeurs de retour signifient la même chose .
3 recv()Fonctions
recv()Fonctions etsend() La valeur de retour de la fonction a le même sens .
recv Les fonctions seront plus complexes dans la pratique ,send La fonction détermine simplement la taille à envoyer , Et envoie juste ( Le tampon général est assez grand , Et une fois envoyé avec succès ).Mais quandrecv Les fonctions sont un peu compliquées à lire à partir du tampon .
En mode blocage:Si le tampon est vide,Alors bloquez,Sin Longueur des données inférieure au tampon , Lisez à partir du tampon nOctets, Reste dans le tampon ,Retourn;Sin égal à la longueur du tampon, puis tout lire ,Le tampon est vide,Retourn,SinPlus long que la longueur du tampon, Puis tout lire ,Le tampon est vide, Renvoie la longueur réelle lue .
En mode non - blocage:Si le tampon est vide,Erreur retournée, Le reste est le même que le mode de blocage .
版权声明
本文为[Tor Pedo]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230315331299.html
边栏推荐
- 月薪10k-20k都无法回答的事务问题,你会吗?
- Seminar playback video: how to improve Jenkins' ability to become a real Devops platform
- C WPF UI framework mahapps switching theme
- Swap the left and right of each node in a binary tree
- Source generator actual combat
- OLED多级菜单记录
- 场景题:A系统如何使用B系统的页面
- 数据库表中不建索引,在插入数据时,通过sql语句防止重复添加(转载)
- MySQL installation pit
- 为什么BI对企业这么重要?
猜你喜欢
超好用的【通用Excel导入功能】
2022 Shandong Province safety officer C certificate work certificate question bank and online simulation examination
Configuration table and page information automatically generate curd operation page
A set of combination boxing to create an idea eye protection scheme
研讨会回放视频:如何提升Jenkins能力,使其成为真正的DevOps平台
The whole network is the most complete. How to do interface automation test? Proficient in interface automation test details
Iotos IOT middle platform is connected to the access control system of isecure center
2022t elevator repair test simulation 100 questions and online simulation test
Configure automatic implementation of curd projects
Aspnetcore configuration multi environment log4net configuration file
随机推荐
MySQL之explain关键字详解
编码电机PID调试(速度环|位置环|跟随)
研讨会回放视频:如何提升Jenkins能力,使其成为真正的DevOps平台
Impact of AOT and single file release on program performance
[mock data] fastmock dynamically returns the mock content according to the incoming parameters
C WPF UI framework mahapps switching theme
Data mining series (3)_ Data mining plug-in for Excel_ Estimation analysis
If the deep replication of objects is realized through C #?
be based on. NETCORE development blog project starblog - (2) environment preparation and creation project
Why is bi so important to enterprises?
JSON related
Mysql database design specification
First in the binary tree
Configuration table and page information automatically generate curd operation page
General test technology [II] test method
场景题:A系统如何使用B系统的页面
svg标签中利用<polygon/>循环数组绘制多边形
C语言实现通讯录----(静态版本)
超好用的【通用Excel导入功能】
7-11 rearrange the linked list (25 points)