高分求Socket Error 10054的解决方法
看了MSDN的帮助,说是远端的连接被中止,但是我服务器和客户端的都出现了10054错误,是什么意思?
这两段程序在客户和服务器端是一摸一样的,但是好像只有在服务器端调用SendData,客户端调用ReceiveData才会出现这个错误。SOCKBLOCK是每个数据包传送数据的长度。
int RecieveData(SOCKET s, unsigned char *Buff, int Length)
{
char Buffer[5];
Buffer[0] = 0x03;
int iRet,i;
int BlockNum = Length/SOCKBLOCK + 1;
int LastLen = Length - ((BlockNum-1)*SOCKBLOCK);
if(LastLen == 0)
{
BlockNum--;
LastLen = SOCKBLOCK;
}
if(BlockNum == 1)
{
iRet = recv(s,(char*) Buff,Length,0);
if(iRet != Length || iRet == SOCKET_ERROR)
{
return 1;
}
}
else
{
for(i=0;i<BlockNum-1;i++)
{
iRet = recv(s,(char*) Buff,SOCKBLOCK,0);
if(iRet != SOCKBLOCK || iRet == SOCKET_ERROR)
{
iRet = GetLastError();
return iRet ;
}
Buff = Buff + SOCKBLOCK;
iRet = send(s,&Buffer[0],5,0);
}
iRet = recv(s,(char*) Buff,LastLen,0);
if(iRet != LastLen || iRet == SOCKET_ERROR)
{
iRet = GetLastError();
return iRet ;
}
}
return 0;
}
int SendData(SOCKET s, unsigned char *Buff, int Length)
{
char Buffer[5];
int iRet,i;
int BlockNum = Length/SOCKBLOCK + 1;
int LastLen = Length - ((BlockNum-1)*SOCKBLOCK);
if(LastLen == 0)
{
BlockNum--;
LastLen = SOCKBLOCK;
}
if(BlockNum == 1)
{
iRet = send(s,(char*) Buff,Length,0);
if(iRet != Length || iRet == SOCKET_ERROR)
{
return 1;
}
}
else
{
for(i=0;i<BlockNum-1;i++)
{
iRet = send(s,(char*) Buff,SOCKBLOCK,0);
if(iRet != SOCKBLOCK || iRet == SOCKET_ERROR)
{
iRet = GetLastError();
return iRet;
}
Buff = Buff + SOCKBLOCK;
iRet = recv(s,&Buffer[0],5,0);
}
iRet = send(s,(char*) Buff,LastLen,0);
if(iRet != LastLen || iRet == SOCKET_ERROR)
{
iRet = GetLastError();
return iRet;
}
}
return 0;
}