原始套接字UDP同一端口收发数据解决方法

原始套接字UDP同一端口收发数据
这个问题前两天问过一次了,后来我以为我可以解决了,就把帖子结了,现在问题好像还是解决不了。    
问题是这样的,现在要在服务器和某一子网的一台Client上用UDP传输数据,连接由Client发起,Server的IP地址和端口都是真实的,我在Client上用一个线程绑定了一个监听端口,用来收信息,为了告诉服务器我的这个端口,我用另一个套接字同样绑定这个端口,在信息发送完成,关闭套接字后,我启动了字线程,但是这个子线程还是无法接收到服务器端返回的数据报(服务器是在接到数据报后执行了100000次的空循环后才向Client发送数据报的)。    
请高手给看看,我把主要代码贴上来了:    
用于做发送套接字的类CShellSendSocket的主要代码    
void     CShellSendSocket::InitSocket()    
{    
WSAStartup(MAKEWORD(2,   2),   &m_wsaData);    
}    
 
void     CShellSendSocket::CreateUDP(char*     strIP)    
{    
m_SendingSocket   =   socket(AF_INET,     SOCK_DGRAM,     IPPROTO_UDP);    
////设置发送所需    
m_ReceiverAddr.sin_family   =   AF_INET;    
m_ReceiverAddr.sin_port   =   htons(6000);    
m_ReceiverAddr.sin_addr.s_addr   =   inet_addr(strIP);    
m_LocalAddr.sin_family   =   AF_INET;    
m_LocalAddr.sin_port   =   htons(9000);    
m_LocalAddr.sin_addr.s_addr   =   htonl(INADDR_ANY);    
bind(m_SendingSocket,   (SOCKADDR     *)&m_LocalAddr,   sizeof(m_LocalAddr));    
}    
void     CShellSendSocket::Cleanup()    
{    
WSACleanup();    
}    
void     CShellSendSocket::CloseUDP()    
{    
closesocket(m_SendingSocket);    
}    
void     CShellSendSocket::SendMessage(char*   strMessage)    
{    
sendto(m_SendingSocket,   strMessage,   strlen(strMessage),   0,   (SOCKADDR     *)&m_ReceiverAddr,   sizeof(m_ReceiverAddr));    
}    
Client线程函数    
UINT     RevThreadProc(LPVOID     pParam)    
{    
WSADATA     wsaData;    
SOCKET       ReceivingSocket;    
SOCKADDR_IN   ReceiverAddr;    
int       nPort   =   9000;    
char     ReceiveBuf[1024];    
int       BufLength   =   1024;    
SOCKADDR_IN   SenderAddr;    
int       SenderAddrsize   =   sizeof(SenderAddr);    

WSAStartup(MAKEWORD(2,2),   &wsaData);    
ReceivingSocket   =   socket(AF_INET,   SOCK_DGRAM,   IPPROTO_UDP);    
ReceiverAddr.sin_family   =   AF_INET;    
ReceiverAddr.sin_port   =   htons(nPort);    
ReceiverAddr.sin_addr.s_addr   =   htonl(INADDR_ANY);    
bind(ReceivingSocket,     (SOCKADDR     *)&ReceiverAddr,   sizeof(ReceiverAddr));    
while(1)    
{    
UINT   ret   =   recvfrom(ReceivingSocket,   ReceiveBuf,   BufLength,   0,   (SOCKADDR     *)&SenderAddr,   &SenderAddrsize);    
if   (ret   ==   SOCKET_ERROR)    
{    
AfxMessageBox( "Err ");    
}    
else   if(ret   ==   0)    
{    
continue;    
}