刚接触VC,用于编写网络传输程序,想用WSAAsyncSelect实现非阻塞方式,可是具体怎么实现却不会!具体程序如下:
HWND hwnd ;hwnd=CNormalrecDlg::GetSafeHwnd();
socket1=socket(AF_INET,SOCK_DGRAM,0);
bind(socket1,(struct sockaddr*)&local,sizeof(local));
WSAAsyncSelect(socket1,hwnd, WM_SOCKET,FD_READ );
并编写了相应的处理程序:
int CNormalrecDlg::Onclinetmes(HWND hwnd,UINT wParam,LONG lParam)
{
CString str;
char buffer[1024];
int fromlen =sizeof(from);
switch(WSAGETSELECTEVENT(lParam))
{
case FD_READ:
if (recvfrom(socket1,buffer,4,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
{
str.Format("%d%d%d%d",buffer[0],buffer[1],buffer[2],buffer[3]);
//str.Format("%d",buffer[0]);
m_show1=str;
UpdateData(FALSE);
}
break;
} return 0;
}可是我却不知道什么时候才能调用Onclinetmes,怎么样将Onclinetmes与程序的其它部分产生关系,不知道我有没有说清楚!希望朋友们帮帮我,谢了!
HWND hwnd ;hwnd=CNormalrecDlg::GetSafeHwnd();
socket1=socket(AF_INET,SOCK_DGRAM,0);
bind(socket1,(struct sockaddr*)&local,sizeof(local));
WSAAsyncSelect(socket1,hwnd, WM_SOCKET,FD_READ );
并编写了相应的处理程序:
int CNormalrecDlg::Onclinetmes(HWND hwnd,UINT wParam,LONG lParam)
{
CString str;
char buffer[1024];
int fromlen =sizeof(from);
switch(WSAGETSELECTEVENT(lParam))
{
case FD_READ:
if (recvfrom(socket1,buffer,4,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
{
str.Format("%d%d%d%d",buffer[0],buffer[1],buffer[2],buffer[3]);
//str.Format("%d",buffer[0]);
m_show1=str;
UpdateData(FALSE);
}
break;
} return 0;
}可是我却不知道什么时候才能调用Onclinetmes,怎么样将Onclinetmes与程序的其它部分产生关系,不知道我有没有说清楚!希望朋友们帮帮我,谢了!
解决方案 »
- 分割视图问题
- MSDN中指出sendmessage 的第一个参数要是接收窗口的句柄 ,为什么我看到没有窗口的类也能收到消息(自定义的 sendmessage,)。 那么在这种没有窗口的类中的sendmeeage 这个句柄又是什么?
- 请教一个棘手的问题
- 如何用MFC实现VS.NET中的浮动框?
- VC6 调试环境中如何看到宏定义的具体定义
- 如何在dll中创建一个窗口?
- CSimpleString问题
- 请教关于SDK窗口拖动的问题。
- %%%%%% 在VC中如何用XMLHTTP的send方法发送一个XML文档
- 如何创建一个调色板?
- CoCreateInstanceEx问题,在线等
- CTreeCtrl中如何传递lparam参数
ON_MESSAGE(WM_SOCKET, Onclinetmes)
ON_MESSAGE(WM_SOCKET, Onclinetmes)
------------------------------------------------------------
THIS IS RIGHT