分片传输——send和recv函数
2013-10-30 14:46
176 查看
最近在写socket编程收发数据,对于如何发送和接收大量数据,一直在思考。send和recv一般缓存区大小为4K,但是如果你要传输的数据超过了这个标准该如何做呢。
我想到的就是如改写write和read函数一样,改写send和recv函数,使他们能分片传输这些大数据量的信息。
注意:在使用sock_send()函数时,一定要注意这样一种情况:(一定要+1,要不然就回出现乱码,就没有终止符)
我想到的就是如改写write和read函数一样,改写send和recv函数,使他们能分片传输这些大数据量的信息。
int sock_send(SOCKET s,const char*buf,int len,int flags) { int n=0,ptr=0; int nLeft=len; if(buf==NULL) return 0; while(nLeft>0) { n=send(s,buf+ptr,nLeft,flags); //发送数据, if(n==SOCKET_ERROR)//网络出现异常 { printf("Failed send(),error code:%d/n",WSAGetLastError()); break; } nLeft-=n; ptr+=n; } return sendCount; // 返回已发送的字节数 }
注意:在使用sock_send()函数时,一定要注意这样一种情况:(一定要+1,要不然就回出现乱码,就没有终止符)
send(s,sendMessage,sizeof(sendMessage)+1,0)
nt TCPrecv(SOCKET s,char *buf,int len,int flags) { int nRev=0,ptr=0; int nLeft=len; if(buf==NULL) return 0; while(nLeft>0) { nRev =recv(s,buf+ptr,length,flags); if(nRev==SOCKET_ERROR) { printf("Failed recv(),error code:%d/n",WSAGetLastError()); break; } nLeft-=nRev; ptr+=nRev; } return recvCount; }
相关文章推荐
- 目前最好用的“点击复制”功能,兼容主流浏览器
- 衣着打扮
- 后缀数组学习笔记——罗穗骞倍增算法代码
- 语录
- 【C】bmp格式图片的二进制存储结构及其图形处理
- web项目的乱码解决方法
- 如何解决“sql 2005 用户sa 登录失败,该用户与可信SQL Server连接无关联”
- UIView 和 CALayer的比较
- SQL 删除重复数据
- secureCRT The remote system refused the connection.
- HeadFirst Jsp 07 (使用 jsp)
- Centos6.3下apache+svn安装配置笔记
- (转)【Oracle经典】132个oracle热门精品资料——下载目录
- 自定义的nslog 可以在debug和release 来区分
- 组合数(优化)输出由小到大
- ListView事件的研究
- redis 安装
- 在线API文档
- Sql中判断"数据库"、"表"、"临时表"、"存储过程"和列"是否存在
- HeadFirst Jsp 06 (会话管理)