recvfrom为什么一直返回-1?高分急求,该如何处理
recvfrom为什么一直返回-1???高分急求
为什么recvfrom函数一直返回值-1啊??????
BOOL CICMP::ReceiveICMPPack()
{
int state;
int len = sizeof(sockaddr_in);
char * addr;
struct hostent *lpHostent = NULL;
addr = inet_ntoa(m_sockAddr.sin_addr);
state = recvfrom(winsock,(char *)recvbuff,MAX_PACKET,0,
(struct sockaddr*)&m_sockAddr,&len);
TRACE( "RECV DONE ");
if (state == SOCKET_ERROR)
{
m_strInfo= "接收失败! ";
return FALSE;
}
...............
创建一个线程接收:
UINT ThreadReceive(LPVOID pParam)
{
SubThreadInfo* pInfo = (SubThreadInfo*)pParam;
CReceiveICMPDlg* pThreadDlg = (CReceiveICMPDlg*)pInfo-> pDialog;
CICMP m_icmp;
CString IPStr=pInfo-> IPStr;
CString strI;
CString s;
BOOL flag;
TRACE( "START THREAD\n ");
m_icmp.Initialize();
TRACE( "After Intialization\n ");
for(int i=0;i <=30;i++)///////////////////////////////////???????
{
if(m_icmp.ReceiveICMPPack((char *)(LPCSTR)IPStr))
{
TRACE( "HERER ");
flag=m_icmp.ReceiveICMPPack();
}
TRACE( "AFTER IF ");
if(flag==TRUE)
{
s.Format( "%d ",i);
int j=pInfo-> list-> InsertItem(0,s);
strI.Format( "%d ",i);
pInfo-> list-> SetItemText(i,1,m_icmp.type);
pInfo-> list-> SetItemText(i,2,m_icmp.IpOrPort);
pInfo-> list-> SetItemText(i,3,m_icmp.num);
pInfo-> list-> SetItemText(i,4,m_icmp.deal);
pInfo-> state-> SetWindowText(m_icmp.m_strInfo);
pInfo-> Number-> SetSel(0,-1);
pInfo-> Number-> ReplaceSel(strI);
Sleep(100);
}
if(WaitForSingleObject(eventStopReceive.m_hObject, 0) == WAIT_OBJECT_0)
break;
}
pThreadDlg-> Routeflag=TRUE;
return 0;
}
我跟踪着看,执行到recvfrom就立刻执行下一步,怎么不阻塞了啊?
------解决方案--------------------
WSAGetLastError看看错误代码是什么?你的ip正确吗?
为什么recvfrom函数一直返回值-1啊??????
BOOL CICMP::ReceiveICMPPack()
{
int state;
int len = sizeof(sockaddr_in);
char * addr;
struct hostent *lpHostent = NULL;
addr = inet_ntoa(m_sockAddr.sin_addr);
state = recvfrom(winsock,(char *)recvbuff,MAX_PACKET,0,
(struct sockaddr*)&m_sockAddr,&len);
TRACE( "RECV DONE ");
if (state == SOCKET_ERROR)
{
m_strInfo= "接收失败! ";
return FALSE;
}
...............
创建一个线程接收:
UINT ThreadReceive(LPVOID pParam)
{
SubThreadInfo* pInfo = (SubThreadInfo*)pParam;
CReceiveICMPDlg* pThreadDlg = (CReceiveICMPDlg*)pInfo-> pDialog;
CICMP m_icmp;
CString IPStr=pInfo-> IPStr;
CString strI;
CString s;
BOOL flag;
TRACE( "START THREAD\n ");
m_icmp.Initialize();
TRACE( "After Intialization\n ");
for(int i=0;i <=30;i++)///////////////////////////////////???????
{
if(m_icmp.ReceiveICMPPack((char *)(LPCSTR)IPStr))
{
TRACE( "HERER ");
flag=m_icmp.ReceiveICMPPack();
}
TRACE( "AFTER IF ");
if(flag==TRUE)
{
s.Format( "%d ",i);
int j=pInfo-> list-> InsertItem(0,s);
strI.Format( "%d ",i);
pInfo-> list-> SetItemText(i,1,m_icmp.type);
pInfo-> list-> SetItemText(i,2,m_icmp.IpOrPort);
pInfo-> list-> SetItemText(i,3,m_icmp.num);
pInfo-> list-> SetItemText(i,4,m_icmp.deal);
pInfo-> state-> SetWindowText(m_icmp.m_strInfo);
pInfo-> Number-> SetSel(0,-1);
pInfo-> Number-> ReplaceSel(strI);
Sleep(100);
}
if(WaitForSingleObject(eventStopReceive.m_hObject, 0) == WAIT_OBJECT_0)
break;
}
pThreadDlg-> Routeflag=TRUE;
return 0;
}
我跟踪着看,执行到recvfrom就立刻执行下一步,怎么不阻塞了啊?
------解决方案--------------------
WSAGetLastError看看错误代码是什么?你的ip正确吗?