我在使用CSocket::Send(字符,长度);发送数据的时候,怎样把握长度的设置?怎么才能得到长度的最大值?

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:23:40
在MFC程序中,我循环使用CSocket::Send(字符,长度);发送数据,
对方也循环使用CSocket::Receive(字符,长度);接受数据,
但传送的速度远远小于我上网的速度,我的程序中两边默认传送字符的长度都是1024字节,是不是这个数字设置的太小的原因?
怎样把握长度的设置?怎么才能得到传送长度的最大值?
请问我的软件传送速度慢的根本原因在哪里呢?

可以使用多线程传送同时设置缓冲区大小
3.在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:

int nNetTimeout=1000;//1秒
//发送时限
setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
//接收时限
setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));

4.在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节
(异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据
和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:

// 接收缓冲区
int nRecvBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

5. 如果在发送数据的时,希望不经历由系统缓冲区到socket缓冲区的拷贝而影响
程序的性能:

int nZero=0;
setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));

6.同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区):

int nZero=0;
setsockopt(socket,SOL_S0CKET,SO