收UDP包,为什么只能响应第一个包呢?该如何解决
收UDP包,为什么只能响应第一个包呢?
我用ethereal抓包时,可以看到udp包源源不断发到1719端口了,可是只响应了第一次。怎么回事啊。
//初始化socket
void CSoftAgentView::initsocket()
{
HWND hWnd= this-> m_hWnd;
m_socket = WSASocket //m_socket 为全局变量(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);//WSA_FLAG_OVERLAPPED
if(INVALID_SOCKET==m_socket)
{
AfxMessageBox( "创建套接字失败 ");
return ;
}
addrSock.sin_family=AF_INET;//addrSock为全局变量
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_port = htons(1719);
if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)))
{
AfxMessageBox( "绑定失败! ");
}
if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,READ2_MSG,FD_READ))
{
closesocket(m_socket);
WSACleanup();
AfxMessageBox( "注册网络读取事件失败! ");
return ;
}
}
///响应代码
void CSoftAgentView::OnRead2(UINT wParam,LONG lParam)
{
CString ss;
char buff[1024];
int length;
memset(buff,0,sizeof(buff));
switch(lParam)
{
case FD_READ:
length = m_listenSock2.Receive(buff,sizeof(buff));
//test
AfxMessageBox( "Received "); //这句话只收到一次
//testend
if(length> 0)
{
ss.Format(buff);
}
break;
default:
break;
}//END CASE
}
------解决方案--------------------
协调双方收发速度,每个udp数据报小于512
------解决方案--------------------
so_recv 改大点
我用ethereal抓包时,可以看到udp包源源不断发到1719端口了,可是只响应了第一次。怎么回事啊。
//初始化socket
void CSoftAgentView::initsocket()
{
HWND hWnd= this-> m_hWnd;
m_socket = WSASocket //m_socket 为全局变量(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);//WSA_FLAG_OVERLAPPED
if(INVALID_SOCKET==m_socket)
{
AfxMessageBox( "创建套接字失败 ");
return ;
}
addrSock.sin_family=AF_INET;//addrSock为全局变量
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_port = htons(1719);
if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)))
{
AfxMessageBox( "绑定失败! ");
}
if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,READ2_MSG,FD_READ))
{
closesocket(m_socket);
WSACleanup();
AfxMessageBox( "注册网络读取事件失败! ");
return ;
}
}
///响应代码
void CSoftAgentView::OnRead2(UINT wParam,LONG lParam)
{
CString ss;
char buff[1024];
int length;
memset(buff,0,sizeof(buff));
switch(lParam)
{
case FD_READ:
length = m_listenSock2.Receive(buff,sizeof(buff));
//test
AfxMessageBox( "Received "); //这句话只收到一次
//testend
if(length> 0)
{
ss.Format(buff);
}
break;
default:
break;
}//END CASE
}
------解决方案--------------------
协调双方收发速度,每个udp数据报小于512
------解决方案--------------------
so_recv 改大点