CSocket sock;
CSendData sHead;
int nPort=7777
if(!sock.Create())
{
strErr="socket创建失败!";
return false;
}
if(!sock.Connect(szAddr,nPort))
{
sock.Close(); strErr="连接主机失败!";
return false;
}
//send Data to host
FillData(sHead);
int sendsize=sizeof(sHead);
if (sendsize!=sock.Send(&sHead,sendsize))
{
sock.Close();
strErr="发送数据出错!";
char cRecv[50000];//={'\0'};
int s=sizeof(cRecv);
for(int i=1;i<50000;i++)
cRecv[i]='\0';
int resize=sock.Receive(cRecv,50000);//sizeof(cRecv));
if (resize==0)
{
sock.Close();
strErr="没有接收到数据";
return false;
}
服务器端为UNIX平台,显示发送大小为2135字节,但是在接收时总是会丢失,接收到的字节为:1640,偶尔有一次接收正确,并且发送数据越大,丢失率越高.且丢失的字节往往都是相同大小,不知道为什么,请高手指点迷津.
CSendData sHead;
int nPort=7777
if(!sock.Create())
{
strErr="socket创建失败!";
return false;
}
if(!sock.Connect(szAddr,nPort))
{
sock.Close(); strErr="连接主机失败!";
return false;
}
//send Data to host
FillData(sHead);
int sendsize=sizeof(sHead);
if (sendsize!=sock.Send(&sHead,sendsize))
{
sock.Close();
strErr="发送数据出错!";
char cRecv[50000];//={'\0'};
int s=sizeof(cRecv);
for(int i=1;i<50000;i++)
cRecv[i]='\0';
int resize=sock.Receive(cRecv,50000);//sizeof(cRecv));
if (resize==0)
{
sock.Close();
strErr="没有接收到数据";
return false;
}
服务器端为UNIX平台,显示发送大小为2135字节,但是在接收时总是会丢失,接收到的字节为:1640,偶尔有一次接收正确,并且发送数据越大,丢失率越高.且丢失的字节往往都是相同大小,不知道为什么,请高手指点迷津.
cRecv[i]='\0';
最好用memset()初始化
但是服务器只发送一次,这样有问题吗?另外,有可能每次接收的都不一样大,甚至接收到0字节,这种情况会不会出现呢?
那有没有一个临界范围,就是说一次接收多少字节才会不出现丢失的情况?
可以试一试4096
只是看法
{
sock.Close();
strErr="发送数据出错!";
char cRecv[50000];//={'\0'};
int s=sizeof(cRecv);
for(int i=1;i<50000;i++)
cRecv[i]='\0';
int resize=sock.Receive(cRecv,50000);//sizeof(cRecv));
if (resize==0)
{
sock.Close();
strErr="没有接收到数据";
return false;
}
代码中SOCKET已经被关闭了,它还能收到东西吗!?(迷茫)
不好意思,刚才不小心把}删掉了,您还真心细,谢谢关注!
能不能提供些相关流传输的资料?