初学winsocket编程,请教一个问题
时间:2010-11-20
来源:互联网
小弟初学,下面这个是从8888端口接收数据包的程序
但是不知道为什么,发送端只发了一个包,下面这个的程序窗口过程就不断的接收到 WM_SOCKET 消息,
直到窗口过程有别的消息到了才停止,如果一直不去动它,就一直CPU占用很高的在那里接这个消息。
缓冲区够用,发送的数据包只有4字节的数据。
请大侠指点一下 O(∩_∩)O谢谢
Assembly code
但是不知道为什么,发送端只发了一个包,下面这个的程序窗口过程就不断的接收到 WM_SOCKET 消息,
直到窗口过程有别的消息到了才停止,如果一直不去动它,就一直CPU占用很高的在那里接这个消息。
缓冲区够用,发送的数据包只有4字节的数据。
请大侠指点一下 O(∩_∩)O谢谢
Assembly code
.386 .model flat, stdcall option casemap :none ; case sensitive include D:\kmd\masm32\INCLUDE\windows.inc include D:\kmd\masm32\INCLUDE\user32.inc includelib D:\kmd\masm32\LIB\user32.lib include D:\kmd\masm32\INCLUDE\kernel32.inc includelib D:\kmd\masm32\LIB\kernel32.lib include D:\kmd\masm32\INCLUDE\wsock32.inc includelib D:\kmd\masm32\LIB\wsock32.lib IDC_EDIT1 equ 10 IDD_DIALOG1 equ 1 IDC_BUTTON1 equ 20 WM_SOCKET equ WM_USER + 100 .data? hInstance dd ? hSocket dd ? hWinMain dd ? .data stSin sockaddr_in <> lpBuffer dd 10 dup (?) ssssss dd 0 LocalIP db '192.168.1.200',0 szErrIP db '无效的服务器IP地址!',0 stSin2 sockaddr_in <> .code _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam local @stWsa:WSADATA local @long mov eax,wMsg ;******************************************************************** .if eax == WM_SOCKET invoke RtlZeroMemory,offset lpBuffer,sizeof lpBuffer invoke RtlZeroMemory,offset stSin2,sizeof stSin2 invoke recvfrom,hSocket,offset lpBuffer,40,0,offset stSin2,addr @long ;******************************************************************** .elseif eax == WM_INITDIALOG push hWnd pop hWinMain invoke WSAStartup,101h,addr @stWsa invoke socket,AF_INET,SOCK_DGRAM,0 mov hSocket,eax invoke WSAAsyncSelect,hSocket,hWinMain,WM_SOCKET,FD_READ invoke inet_addr,offset LocalIP .if eax == INADDR_NONE invoke MessageBox,hWnd,addr szErrIP,NULL,MB_OK or MB_ICONSTOP .endif mov stSin.sin_addr,eax mov stSin.sin_family,AF_INET invoke htons,8888 mov stSin.sin_port,ax invoke bind,hSocket,offset stSin,sizeof stSin ;******************************************************************** .elseif eax == WM_CLOSE invoke closesocket,hSocket invoke WSACleanup invoke EndDialog,hWnd,NULL ;******************************************************************** .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,offset _ProcDlgMain,NULL invoke ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start
作者: shuzihuozifuzuhe 发布时间: 2010-11-20
你在recvfrom后,用close关闭socket,再试试还能不能,收到包,呵呵。
作者: asmlearn 发布时间: 2010-11-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28