导航:首页 > 编程语言 > socket编程recv

socket编程recv

发布时间:2025-01-15 14:17:26

‘壹’ Socket send函数和recv函数详解

send函数

在Socket编程中,send函数用于向TCP连接另一端发送数据。无论客户端或服务器应用程序,均能使用此函数。客户端通常用send向服务器发送请求,而服务器则用它回应客户端。该函数接受套接字描述符、发送数据缓冲区、数据字节数及标志参数作为输入。函数比较要发送的数据长度与套接字的发送缓冲区大小。若大于,则返回SOCKET_ERROR。若小于或等于,则检查协议是否正在发送数据或套接字缓冲区是否有数据。若协议未开始发送或无数据,则比较剩余空间与数据长度。若大于,则等待协议发送数据;若小于,则将数据复制到剩余空间。成功复制后,返回实际复制的字节数。出现错误时,返回SOCKET_ERROR。若在等待协议发送数据时网络中断,也返回SOCKET_ERROR。在Unix系统下,进程会收到SIGPIPE信号,处理终止。对于异步Socket的send函数,在网络刚断开时仍能发送,并返回相应字节数,select检测也是可写的,但稍后再次发送会出错。select检测无法检测出可写状态。

recv函数

recv函数用于从TCP连接另一端接收数据。客户端和服务器应用程序都可使用此函数。函数接收套接字描述符、接收数据缓冲区、数据长度及标志参数。执行流程如下:等待s的发送缓冲中的数据被协议完全传输。若在传输中出现网络错误,返回SOCKET_ERROR。若发送缓冲无数据或数据传输完毕,检查套接字接收缓冲区。若无数据或协议正在接收数据,则等待协议接收完毕。将s接收缓冲中的数据复制到buf中,返回实际复制的字节数。复制时出现错误,返回SOCKET_ERROR。若在等待协议接收数据时网络中断,返回0。在Unix系统下,进程会收到SIGPIPE信号,处理终止。

‘贰’ 在socket编程中怎么判断recv是否接收完成

recv函数怎么判断接收结束:
1、例如在数据流中带个结束标识,那样读到结束标识就知道传输完成,停止。 这种方法只能用传输文本文件,有个文件结束符,二进制文件不行。

2、先传个长度,那么接收方就可以控制 接下来要读取多少个字节的数据才算完成。这个适合传输任何文件。

例子:
C/C++ code
client的发函数为:char line[MAXLINE]; while ((fgets(line,MAXLINE,fd)!=NULL) // fd 为一个文件的指针 {send (connfd, line,strlen(line),0) // connfd为 socket}server 的接收函数为:for (;;) {if ((n=recv(connfd, recvline,MAXLINE,0)>0) {recvline[n]=0;fputs(stdout,recvline);else break;}}
当发端停止发送后,收端无法得知数据已经传输完毕,从而一直在for中死循环,可以用以上方法判断接收结束。

阅读全文

与socket编程recv相关的资料

热点内容
欧美程序员加班工作进度 浏览:491
5种单片机 浏览:923
采购程序员 浏览:929
云兔服务器搭配 浏览:700
python采集图片 浏览:43
如何我的世界服务器地址 浏览:189
编程猫源码精灵2021年最新兑换码 浏览:670
世界上最快的动物是什么app 浏览:889
一打开微信文件夹就卡 浏览:265
什么软件可以做指标源码 浏览:465
java程序员饱和 浏览:150
路由器怎么加密更安全 浏览:695
内存卡加密卡是什么意思 浏览:695
帮别人做app需要注意什么 浏览:668
android获取string字符 浏览:182
python中的计数器 浏览:622
海地加密驱动安装 浏览:844
慧净电子12单片机开发板 浏览:940
什么网段服务器好 浏览:599
服务器商店怎么造 浏览:934