我的程序代码如下:
但是编译的时候OnCreate函数里的WSAAsyncSelect运行之后,不能马上调用WM_SOCK1的OnSock函数,我在.cpp文件前面加上了消息映射:ON_MESSAGE(WM_SOCK1,OnSock1)
在类的头文件中也声明了消息:
#define WM_SOCK1 WM_USER+203
#define WM_SOCKREAD WM_USER+204希望大家帮忙分析一下,急用,谢谢了!int CDTSockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
lines=0;
GetSystemTime(&t1);
WSADATA d;
WSAStartup(MAKEWORD(2,2),&d);
sd=socket(AF_INET,SOCK_DGRAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.s_addr=inet_addr("192.168.1.1");
int r=bind(sd,(sockaddr*)&addr,sizeof(sockaddr));
r=1;
r=WSAAsyncSelect(sd,m_hWnd,WM_SOCK1,FD_READ);
运行完这一步就直接跳到return了,没有执行OnSock,是不是前面某一块没有成功,但是我都是从另一个程序上拷贝下来的,那个程序好使啊。大家帮我看看!谢谢!
return 0;
}int CDTSockCtrl::OnSock1(WPARAM wParam, LPARAM lParam)
{
int num,len,i;
char *pt;
WORD t;
len=sizeof(add_from);
num=recvfrom(sd,(char*)Recvpb,1024*8,0,&add_from,&len);
pt=(char*)Recvpb;
//////////////////////////////////////////////////////////////////////////
if(pt<(char*)Recvpb+num-102)
{
m_numperb=*(pt+4);//
m_bperbag=*(pt+5);//
m_nofbag=*(pt+6);//
m_maxnofbag=0;
if(m_nofbag==0)
{
lines++;
for(i=0;i<m_bperbag;i++)
{
CopyMemory(Recvpl+i*m_numperb,pt+8+i*m_numperb*2,m_numperb*2);// }
}
if(counter%20==0)
{
Invalidate();
}
else if(counter==1024)
{
counter=0;
}
else
counter++;
}
//////////////////////////////////////////////////////////////////////////
FireRecvEv((long*)Recvpl);
return 0;
}
但是编译的时候OnCreate函数里的WSAAsyncSelect运行之后,不能马上调用WM_SOCK1的OnSock函数,我在.cpp文件前面加上了消息映射:ON_MESSAGE(WM_SOCK1,OnSock1)
在类的头文件中也声明了消息:
#define WM_SOCK1 WM_USER+203
#define WM_SOCKREAD WM_USER+204希望大家帮忙分析一下,急用,谢谢了!int CDTSockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
lines=0;
GetSystemTime(&t1);
WSADATA d;
WSAStartup(MAKEWORD(2,2),&d);
sd=socket(AF_INET,SOCK_DGRAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.s_addr=inet_addr("192.168.1.1");
int r=bind(sd,(sockaddr*)&addr,sizeof(sockaddr));
r=1;
r=WSAAsyncSelect(sd,m_hWnd,WM_SOCK1,FD_READ);
运行完这一步就直接跳到return了,没有执行OnSock,是不是前面某一块没有成功,但是我都是从另一个程序上拷贝下来的,那个程序好使啊。大家帮我看看!谢谢!
return 0;
}int CDTSockCtrl::OnSock1(WPARAM wParam, LPARAM lParam)
{
int num,len,i;
char *pt;
WORD t;
len=sizeof(add_from);
num=recvfrom(sd,(char*)Recvpb,1024*8,0,&add_from,&len);
pt=(char*)Recvpb;
//////////////////////////////////////////////////////////////////////////
if(pt<(char*)Recvpb+num-102)
{
m_numperb=*(pt+4);//
m_bperbag=*(pt+5);//
m_nofbag=*(pt+6);//
m_maxnofbag=0;
if(m_nofbag==0)
{
lines++;
for(i=0;i<m_bperbag;i++)
{
CopyMemory(Recvpl+i*m_numperb,pt+8+i*m_numperb*2,m_numperb*2);// }
}
if(counter%20==0)
{
Invalidate();
}
else if(counter==1024)
{
counter=0;
}
else
counter++;
}
//////////////////////////////////////////////////////////////////////////
FireRecvEv((long*)Recvpl);
return 0;
}
解决方案 »
- MDI CHtmlView 如何在新标签页中打开指定的Url
- 驱动开发包(DDK)都通不过杀软的吗?
- 双击vc6.0工程文件打开时,始终在一个vc窗口,如何自动在新vc窗口中打开?
- 在MFC中如何在一个CView类实例访问另外一个CView类实例的函数啊?
- 请问我在ACTIVEX中DoModal()的对话框窗口如何在windows工具条上显示?
- 急,高薪聘兼职!!!找上海浦东(南浦大桥附近)delphi,VC程序员。
- MFC开机启动最小化到托盘
- VC++6.0开发的程序到vista后读写注册表异常?转到vs2008后不能读写注册表
- 请问如何写一个全屏的窗口?
- 通过什么方法可以大小自由显示窗口
- 线程的互斥信号量Mutex如何修改.
- MFC画图处理问题
WSAAsyncSelect是用来进行消息绑定的。由最后一个参数指定需要响应的事件。只有发生这些事件时,才能发送指定的消息。你这里指定FR_READ。但并没有看到读啊。
switch(LOWORD(lParam))
{
case FD_READ:
......(你的那堆代码)
2、然后在触发的函数中在次进行FD_READ|FD_WRITE 才可以