导航:首页 > 编程语言 > 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相关的资料

热点内容
匀称app怎么用 浏览:58
pythonemail中文乱码 浏览:439
android访问html 浏览:84
做一个app或者网页用什么编程 浏览:772
一体机服务器运行失败怎么办 浏览:933
longjava比较大小 浏览:527
clojure编程pdf 浏览:18
一年级数学圈一圈的算法 浏览:106
完整的python 浏览:39
c51单片机数字钟 浏览:920
apk文件反编译后安装包损坏 浏览:813
app图标分别是什么 浏览:364
linux全选命令 浏览:365
怎么用华硕app 浏览:960
小明台湾通道加密 浏览:373
apriori算法的java 浏览:712
jscanvas压缩图片 浏览:388
单片机与汽车单片机有何不同 浏览:969
兽医云平台服务器 浏览:321
php循环字母 浏览:663