UDP 通信采用WSAAsyncSelect模型 可是为什么不会由注册FD_READ事件产生的自定义消息呢? 本帖最后由 VisualEleven 于 2012-05-19 12:53:56 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 afx_msg LRESULT OnSock(WPARAM wParam,LPARAM lParam);ON_MESSAGE(UM_SOCK,OnSock)#define UM_SOCK (WM_USER+401)都做了相应的填写 请大家帮帮忙啊 发送了 到了服务器端OnSock那里设了断点 就是没动静··· 我看见两个机子都有相应的收发数据包·· 发送了 到了服务器端OnSock那里设了断点 就是没动静··· 我看见两个机子都有相应的收发数据包·· wsagetlasterror() 是什么?wsastartup有嘛?端口正确嘛? 1 udp不需要bind2. 检查初始化环境3, 更换端口试试。 你先指定端口号和ip执行一下试试,用"串口转网络调试助手"作为服务器,我做的一个tcp的,代码:BOOL CClientDemoDlg::InitSocket(){ m_socket = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0); if (INVALID_SOCKET == m_socket) { AfxMessageBox(_T("套接字建立失败!")); return FALSE; } return TRUE;}LRESULT CClientDemoDlg::OnSock( WPARAM wParam,LPARAM lParam){ switch(LOWORD(lParam)) { case FD_READ: WSABUF wsabuf; wsabuf.buf=new char[200]; wsabuf.len=200; DWORD dwRead; DWORD dwFlag=0; DWORD dwIP; ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SERVERIP))->GetAddress(dwIP); CString serverPort; GetDlgItem(IDC_EDIT_SERVERPORT)->GetWindowTextW(serverPort); SOCKADDR_IN addrSock; addrSock.sin_family = AF_INET; addrSock.sin_port = htons(_ttoi(serverPort)); addrSock.sin_addr.S_un.S_addr = htonl(dwIP); int len=sizeof(SOCKADDR); CString str; if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag, (SOCKADDR*)&addrSock,&len,NULL,NULL)) { AfxMessageBox(_T("接收数据失败!")); return -1; } if (wsabuf.buf[6] == 0x0B && wsabuf.buf[7] == 0x01) { GetDlgItem(IDC_STATIC_DECRIPTION)->SetWindowText(_T("进站:ATM站1到了")); } break; } return 0;}void CClientDemoDlg::OnBnClickedButtonConnect()//连接服务器{ DWORD dwIP; ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SERVERIP))->GetAddress(dwIP); CString serverPort; GetDlgItem(IDC_EDIT_SERVERPORT)->GetWindowTextW(serverPort); SOCKADDR_IN addrSock; addrSock.sin_family = AF_INET; addrSock.sin_port = htons(_ttoi(serverPort)); addrSock.sin_addr.S_un.S_addr = htonl(dwIP); connect(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)); GetDlgItem(IDC_STATIC_DECRIPTION)->SetWindowTextW(_T("连接成功!")); SetDlgItemText(IDC_BUTTON_CONNECT,_T("关闭连接")); GetDlgItem(IDC_BUTTON_LIGHT)->EnableWindow(TRUE);//使路灯开关有效 if (SOCKET_ERROR == WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ))//注册事件 { AfxMessageBox(_T("注册网络读取事件失败")); return; }}应该是OnSock函数里面要取出参数低字节 vc 求助,如何创建纯资源的dll文件? 关于写文件 单文档工程在连续打开几个文件后自动关闭,这是怎么回事? 关于CScrollView中图像闪烁的问题 关于AfxBeginThread的问题 Win2003下所有目录都是"只读"属性!!?? 一家公司的面试题目:请模仿MFC的类CString,实现其中一些简单的功能,详细题目请进来看看! vc ADO读不出mysql数据库中的text字段 main 和 winmain 的问题 求曲线中的某段曲线的频率 今天卸载autocad竟然提示我关闭飞秋
afx_msg LRESULT OnSock(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(UM_SOCK,OnSock)#define UM_SOCK (WM_USER+401)都做了相应的填写 请大家帮帮忙啊
wsastartup有嘛?
端口正确嘛?
BOOL CClientDemoDlg::InitSocket()
{
m_socket = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
if (INVALID_SOCKET == m_socket)
{
AfxMessageBox(_T("套接字建立失败!"));
return FALSE;
}
return TRUE;
}
LRESULT CClientDemoDlg::OnSock( WPARAM wParam,LPARAM lParam)
{
switch(LOWORD(lParam))
{
case FD_READ:
WSABUF wsabuf;
wsabuf.buf=new char[200];
wsabuf.len=200;
DWORD dwRead;
DWORD dwFlag=0;
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SERVERIP))->GetAddress(dwIP);
CString serverPort;
GetDlgItem(IDC_EDIT_SERVERPORT)->GetWindowTextW(serverPort);
SOCKADDR_IN addrSock;
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(_ttoi(serverPort));
addrSock.sin_addr.S_un.S_addr = htonl(dwIP);
int len=sizeof(SOCKADDR);
CString str;
if(SOCKET_ERROR==WSARecvFrom(m_socket,&wsabuf,1,&dwRead,&dwFlag,
(SOCKADDR*)&addrSock,&len,NULL,NULL))
{
AfxMessageBox(_T("接收数据失败!"));
return -1;
}
if (wsabuf.buf[6] == 0x0B && wsabuf.buf[7] == 0x01)
{
GetDlgItem(IDC_STATIC_DECRIPTION)->SetWindowText(_T("进站:ATM站1到了"));
}
break;
}
return 0;
}
void CClientDemoDlg::OnBnClickedButtonConnect()//连接服务器
{
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_SERVERIP))->GetAddress(dwIP);
CString serverPort;
GetDlgItem(IDC_EDIT_SERVERPORT)->GetWindowTextW(serverPort);
SOCKADDR_IN addrSock;
addrSock.sin_family = AF_INET;
addrSock.sin_port = htons(_ttoi(serverPort));
addrSock.sin_addr.S_un.S_addr = htonl(dwIP);
connect(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
GetDlgItem(IDC_STATIC_DECRIPTION)->SetWindowTextW(_T("连接成功!"));
SetDlgItemText(IDC_BUTTON_CONNECT,_T("关闭连接"));
GetDlgItem(IDC_BUTTON_LIGHT)->EnableWindow(TRUE);//使路灯开关有效
if (SOCKET_ERROR == WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ))//注册事件
{
AfxMessageBox(_T("注册网络读取事件失败"));
return;
}
}
应该是OnSock函数里面要取出参数低字节