WSAAsyncselec异步模式服务端例子

 

.386
.model flat,stdcall
option casemap:none


include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

include wsock32.inc
includelib wsock32.lib
include  comctl32.inc
includelib  comctl32.lib
include ws2_32.inc
includelib ws2_32.lib

ICO_MAIN equ 1


IDC_DLG equ 1000
IDC_BTN1 equ 1001
IDC_EDT1 equ 1002

WM_SOCKET equ WM_USER+1
TOPT   equ 8888

.data

szDllEdit db 'RichEd20.dll',0
szFont  db '宋体',0
szFord  db "%s--- %d",0
szInit  db "接收数据开始。。。",0,0dh,0ah
szStart  db "开始。。",0,0dh,0ah

.data?
hInstance dd ?
hWinMain dd ?
Listen  dd ?
Accept  dd ?
hWinEdit dd ?
hRichEdit dd ?
.code
_InitSocket proc
  LOCAL  @wsdata:WSADATA
  local @stSin:sockaddr_in
  invoke RtlZeroMemory,addr @wsdata,sizeof @wsdata
  invoke WSAStartup,202h,addr @wsdata
  invoke socket,PF_INET,SOCK_STREAM,0
  mov Listen,eax
  
  
  invoke WSAAsyncSelect,Listen,hWinMain,WM_SOCKET,FD_ACCEPT or FD_CLOSE
  
  
  invoke RtlZeroMemory,addr @stSin,sizeof @stSin
  mov @stSin.sin_family,AF_INET
  invoke htons,TOPT
  mov @stSin.sin_port,ax
  mov @stSin.sin_addr,INADDR_ANY
  invoke bind,Listen,addr @stSin,sizeof @stSin
  .if eax
   invoke MessageBox,NULL,0,0,MB_OK
   mov eax,FALSE
   ret
   
  .endif
  
  invoke listen,Listen,5
  
  mov eax,TRUE
 ret

_InitSocket endp
_AppendInfo proc _lpsz;在rchiedit控件显示的
  local @stCR:CHARRANGE

   pushad
   invoke GetWindowTextLength,hWinEdit
   mov @stCR.cpMin,eax
   mov @stCR.cpMax,eax
   invoke SendMessage,hWinEdit,EM_EXSETSEL,0,addr @stCR
   invoke SendMessage,hWinEdit,EM_REPLACESEL,FALSE,_lpsz
   ;invoke SendMessage,hWinEdit,EM_SETWORDBREAKPROC
   popad
   ret
 
_AppendInfo endp
_Init proc
  local @stCf:CHARFORMAT
  LOCAL  @addimage:TBADDBITMAP
   invoke GetDlgItem,hWinMain,IDC_EDT1
   mov hWinEdit,eax
   invoke SendMessage,hWinEdit,EM_SETTEXTMODE,TM_PLAINTEXT,0
   invoke RtlZeroMemory,addr @stCf,sizeof @stCf
   mov @stCf.cbSize,sizeof @stCf
   
   mov @stCf.yHeight,9 * 20
   mov @stCf.dwMask,CFM_FACE or CFM_SIZE or CFM_BOLD
   invoke lstrcpy,addr @stCf.szFaceName,addr szFont
   invoke SendMessage,hWinEdit,EM_SETCHARFORMAT,0,addr @stCf
   invoke SendMessage,hWinEdit,EM_EXLIMITTEXT,0,-1
   invoke _AppendInfo,addr szInit
   invoke SendMessage,hWinEdit,EM_SETBKGNDCOLOR,0,0FF0000h
   ret

_Init endp
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
   LOCAL @szBuffer[2056]:byte
   LOCAL @szBuff[2056]:byte
   LOCAL @INI:INITCOMMONCONTROLSEX
   mov eax,wMsg
  .if eax == WM_INITDIALOG
   push hWnd
   pop hWinMain
   invoke LoadIcon,hInstance,ICO_MAIN
   invoke SendMessage,hWinMain,WM_SETICON,ICON_BIG,eax
   mov @INI.dwICC,ICC_INTERNET_CLASSES
   invoke InitCommonControlsEx,addr @INI
   invoke _Init
   invoke _InitSocket
   
   
  .elseif eax == WM_CLOSE
   
   invoke EndDialog,hWnd,NULL
  .elseif eax==WM_SOCKET
    mov ebx,lParam
    .if bx
     .if bx==FD_ACCEPT
      invoke accept,wParam,NULL,NULL
      mov Accept,eax
      invoke _AppendInfo,addr szStart
      invoke WSAAsyncSelect,eax,hWinMain,WM_SOCKET,FD_READ or FD_WRITE or FD_CLOSE
     .elseif bx==FD_READ
      invoke recv,Accept,addr @szBuffer,sizeof @szBuffer,0
      invoke wsprintf,addr @szBuff,addr szFord,addr @szBuffer,eax
      invoke _AppendInfo,addr @szBuffer
      invoke MessageBox,NULL,0,0,MB_OK 
      
     .elseif bx==FD_CLOSE
      invoke closesocket,wParam 
     
     .elseif bx==FD_WRITE
      
      
         
     .endif
    .endif
    ;and ebx,0ffff0000h
    
    .if ebx & 0ffff0000h
     invoke closesocket,wParam
     
    .endif
    
  .elseif eax==WM_COMMAND
  
   mov eax,wParam
   
   .if eax==IDC_BTN1
   
    
   .endif
  .else
   mov eax,FALSE
   ret   
  .endif
  mov eax,TRUE
 
 ret

_ProcDlgMain endp

start:
 invoke LoadLibrary,offset szDllEdit
  mov hRichEdit,eax
 invoke GetModuleHandle,NULL
  mov hInstance,eax
  
  invoke DialogBoxParam,eax,IDC_DLG,NULL,offset _ProcDlgMain,0
  invoke ExitProcess,0
end start

 

 

 

 

 

下面是.rc文件

 

#include <D:/Program Files/RadASM/Masm/Inc/resource.h>
#define ICO_MAIN  1


#define IDC_DLG 1000
#define IDC_BTN1 1001
#define IDC_EDT1 1002
IDC_DLG DIALOGEX 6,6,367,161
CAPTION "WSAAsyn"
FONT 8,"MS Sans Serif",0,0
STYLE 0x10CF0000
BEGIN
  CONTROL "SEND",IDC_BTN1,"Button",0x50010000,252,27,74,19
  CONTROL "  ",IDC_EDT1,"RichEdit20A",0x50010000,0,1,204,163,0x00000200
 
END

 

所写代码仅是为了掌握下网络编程中的一些小知识,不要见怪哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值