为什么每次send,recv后下次再次执行此操作需要先关闭套接字再连接后才成功?
我封装了套接字,执行获取网页源码的功能
我采取的是tcp协议,阻塞模式的。
这个是我自己定义初始化socket以及连接主机、端口的函数(没问题)
bInitSocket(CString pHost,//主机,域名
int nPort)//端口号
{
//...
//连接服务器
if (connect(m_Socket, (sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
MessageBox(NULL, "Connect Error!", "Error", 0);
CloseSocket();
return FALSE;
}
//...
}
nPostPackage(const CString strPockage)
{
//....
//发送数据
nSend = send(m_Socket, strNewPockage.GetBuffer(0), strNewPockage.GetLength(), 0);
//...
}
nGetData()
{
while (nRet > 0)
{
//...
// 接收返回数据包
nRet = recv(m_Socket, (LPSTR)arryRecv, sizeof(arryRecv), 0);
//...
}
{}
CloseSocket()
{
try
{
shutdown(m_Socket, 0X02);
closesocket(m_Socket);
WSACleanup();
}
catch (...)
{
MessageBox(NULL, "Close socket fail", "Error", 0);
}
}
{
nPostPackage(const CString strPockage);//发送数据包后
nGetData();//接收数据
}
{
bInitSocket(CString pHost,//主机,域名
int nPort);//端口号//初始化并且连接服务器
nPostPackage(const CString strPockage);//发送数据包后
nGetData();//接收数据
CloseSocket();//关闭套接字
}
nGetData()
{
while (true)
{
//...
// 接收返回数据包
int nRet = recv(m_Socket, (LPSTR)arryRecv, sizeof(arryRecv), 0);
//...
if(nRet > 0)
{
//todo
}
else()
{}
}
{}