当前位置:网站首页>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
边栏推荐
- oracle 查询外键含有逗号分隔的数据
- 软件测试相关知识~
- What kind of experience is it to prepare for a month to participate in ACM?
- js递归树结构计算每个节点的叶子节点的数量并且输出
- ASP. Net 6 middleware series - conditional Middleware
- [MySQL] left Function | Right Function
- 2022山东省安全员C证上岗证题库及在线模拟考试
- A comprehensive understanding of static code analysis
- 建立与遍历二叉树
- Comprehensive calculation of employee information
猜你喜欢
![[MySQL] left Function | Right Function](/img/26/82e0f2280de011636c26931a74e749.png)
[MySQL] left Function | Right Function

How does Microsoft solve the problem of multiple PC programs

A set of combination boxing to create an idea eye protection scheme

ASP. Net and ASP NETCORE multi environment configuration comparison

“如何实现集中管理、灵活高效的CI/CD”在线研讨会精彩内容分享
![Use of ADB command [1]](/img/e6/fb8fd6956c226f75b831f8eb46277f.png)
Use of ADB command [1]

C WPF UI framework mahapps switching theme
![General testing technology [1] classification of testing](/img/f1/d80b6793b6443cbc4048d7e6319f51.png)
General testing technology [1] classification of testing

Experiment 5 components and event handling

二进制文件版本控制工具选择难?看完这篇你会找到答案
随机推荐
Why is bi so important to enterprises?
MySQL之explain关键字详解
[vs Code] solve the problem that the jupyter file displays exceptions in vs code
2022年度Top9的任务管理系统
Fight leetcode again (290. Word law)
Due to 3 ²+ four ²= five ², Therefore, we call '3,4,5' as the number of Pythagorean shares, and find the array of all Pythagorean shares within n (including n).
Five tips for cross-border e-commerce in 2022
Use of metagroup object tuple in C
js 中,为一个里面带有input 的label 绑定事件后在父元素绑定单机事件,事件执行两次,求解
The most detailed in the whole network, software testing measurement, how to optimize software testing cost and improve efficiency --- hot
C语言实现通讯录----(静态版本)
yes. Net future
xutils3修改了我提报的一个bug,开心
Utgard connection opcserver reported an error caused by: org jinterop. dcom. common. JIRuntimeException: Access is denied. [0x800
IOTOS物联中台对接海康安防平台(iSecure Center)门禁系统
Mysql database
General test technology [II] test method
C syntax pattern matching [switch expression]
数据库表中不建索引,在插入数据时,通过sql语句防止重复添加(转载)
[MySQL] left function | right function