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

热点内容
程序员cc发展方向 浏览:985
智慧黑板在哪里下载app 浏览:309
男生穿衣搭配app哪个好 浏览:594
光大信用卡年费在app哪里可以看 浏览:211
如何在找机平台下载app 浏览:395
西安php工作好找吗 浏览:927
outlook命令 浏览:229
程序员那么可爱主角介绍 浏览:934
银行卡短信消息如何加密 浏览:246
文件夹怎么不重名 浏览:406
linuxyum安装java 浏览:250
java数字计算 浏览:286
java按钮文字 浏览:641
python列表互换位置 浏览:337
sw怎么删除定向命令 浏览:757
php包含数组元素 浏览:666
安卓系统开发app需要什么 浏览:730
ssh2项目源码 浏览:288
三星提供了什么服务器地址 浏览:903
阿里云轻量应用服务器60元 浏览:160