.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
所写代码仅是为了掌握下网络编程中的一些小知识,不要见怪哈