学的时间不长。
我想要做一个Server阻塞方式的,这个需要一直打开,除非停电。
然后做Client,和Server连接。我开始时采取,一次连接之后就把Server重启,就是重新做Socket,然后Bind之类的。然后现在我想做改进,就是让Server一直开,一直处于Accept的状态,然后Recv或Send。。
但是当Client在还没有Send或Recv结束突然断掉,那Server就死掉了,因为用的是阻塞的方式。谁给点思路,或者代码之类的。
我不知道该怎么做。是阻塞方式的,因为这个比较简单。
我想要做一个Server阻塞方式的,这个需要一直打开,除非停电。
然后做Client,和Server连接。我开始时采取,一次连接之后就把Server重启,就是重新做Socket,然后Bind之类的。然后现在我想做改进,就是让Server一直开,一直处于Accept的状态,然后Recv或Send。。
但是当Client在还没有Send或Recv结束突然断掉,那Server就死掉了,因为用的是阻塞的方式。谁给点思路,或者代码之类的。
我不知道该怎么做。是阻塞方式的,因为这个比较简单。
那样Client就连接不上了啊。
那样怎么Client已经断开了啊?
不知道这样说是否足够明白?
有点眼高手低。
要是在accept的时候断开呢?
int CBaseSocket::SendData(char pBuf[],int iLength)//发送数据
{
int nLeft=iLength;
int nIndex=0;
BOOL bResult=TRUE;
while (nLeft > 0)
{
int nRet=send(m_socket,pBuf+nIndex,nLeft,0);
if (SOCKET_ERROR == nRet || WSAETIMEDOUT ==nRet)
{
int err=WSAGetLastError();
TRACE1("socket send data error is %d",err);
TRACE0("socket send data error");
if (err==10053 || err==10054) // 连接已断开
{
ReConnect();
return FALSE;
}
bResult=FALSE;
break;
}
nIndex += nRet;
nLeft -= nRet;
}
return bResult;
}
我邮箱[email protected]
动手的时候发现好多东西真不知道怎么写