Windows C++ Socket 大文件传输

大文件接收

因为演示不方便 所以 我只给出关键代码 其他小东西,读者自己解决,或者私信我。

// recv 的改造 让他可以循环接收 就是为了大数据传输
int MySocketRecv0(int sock, char* buf, int dateSize)
{
	//循环接收
	int numsRecvSoFar = 0;//目前收到的数据
	int numsRemainingToRecv = dateSize;//剩余要收的数据
	printf("enterMySocketRecv0\n");
	while (1) 
	{
		int bytesRead = recv(sock, &buf[numsRecvSoFar], numsRemainingToRecv, 0);
		printf("###bytesRead = %d, numsRecvSoFar = %d, numsRemainingToRecv = %d\n", bytesRead, numsRecvSoFar, numsRemainingToRecv);
		if (bytesRead == numsRemainingToRecv)  //接受的数据的大小和还要接受的数据的大小 一样接收完毕
		{
			return 0;  //接收完毕
		}
		else if (bytesRead > 0)
		{
			numsRecvSoFar += bytesRead;
			numsRemainingToRecv -= bytesRead;
			continue;
		}
		else if ((bytesRead < 0 ) && (ERROR == EAGAIN))
		{
			continue;
		}
		else
		{
			return -1;
		}
	}

}
大文件发送
//send的改造 传输大数据的
int MySocketSend0(int socketNum, unsigned char* data, unsigned dataSize) 
{
	unsigned numBytesSentSoFar = 0;
	unsigned numBytesRemainingToSend = dataSize;
	while (1)
	{
		int bytesSend = send(socketNum, (char const*)(&data[numBytesSentSoFar]), numBytesRemainingToSend, 0);
		if (bytesSend==numBytesRemainingToSend)
		{
			return 0;
		}
		else if(bytesSend>0)
		{
			numBytesSentSoFar += bytesSend;
			numBytesRemainingToSend -= bytesSend;
			continue;

		}
		else if((bytesSend < 0) && (ERROR == EAGAIN))
		{
			continue;
		}
		else
		{
			return -1;
		}
	}
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值