///
// wsaasyncselect.cpp檔案
//#define wsagetselecterror(lparam) hiword(lparam)//高字為出錯**
//#define wsagetselectevent(lparam) loword(lparam)//低字為通知碼
//允許應用程式以windows訊息的形式接收網路事件通知
//int wsaasyncselect(
//socket s,//需要設定的套接字控制代碼
//hwnd hwnd,//指定乙個視窗控制代碼
//u_int wmsg,//網路事件到來時接收到的訊息id,可以在wm_user以上的
//數值中任意選擇乙個用做id
//long levent//指定哪些通知碼需要傳送
//levent具體組合
//fd_read接收到對方發過來的資料報
//fd_write資料緩衝區滿後再次變空時,winsock介面通過該通知碼通知應用程式。
//fd_accept監聽中套接字檢測到有連線進入
//fd_connect如果用套接字去連線對方的主機,當連線動作完成後會接收到
//這個通知碼
//fd_close 檢測到套接字對應的連線被關閉
#include "../common/initsock.h"
#include
#define wm_socket wm_user +101// 自定義訊息
cinitsock thesock;
ushort nport = 4567;//此伺服器監聽的埠號
// 建立監聽套節字
socket slisten = ::socket(af_inet, sock_stream,ipproto_tcp);
sockaddr_in sin;
sin.sin_family = af_inet;
sin.sin_port = htons(nport);
sin.sin_addr.s_un.s_addr = inaddr_any;
// 繫結套節字到本地機器
if(::bind(slisten,(sockaddr*)&sin, sizeof(sin)) ==socket_error)
// 將套接字設為視窗通知訊息型別。
::wsaasyncselect(slisten, hwnd, wm_socket,fd_accept|fd_close);
// 進入監聽模式
::listen(slisten, 5);
// 從訊息佇列中取出訊息
msg msg;
while(::getmessage(&msg, null, 0,0))
// 當getmessage返回0時程式結束
return msg.wparam;
}lresult callback windowproc(hwnd hwnd, uint umsg, wparam wparam,lparam lparam)
//處理發生的事件
switch(wsagetselectevent(lparam))
break;
casefd_write:
break;
casefd_read:
;if(::recv(s,sztext, 1024, 0) == -1)
::closesocket(s);
else
printf("接收資料:%s",sztext);
}break;
casefd_close:
break;}}
return 0;
case wm_destroy:
::postquitmessage(0) ;
return 0 ;
}// 將我們不處理的訊息交給系統做預設處理
return ::defwindowproc(hwnd, umsg, wparam,lparam);
}
WIN網路程式設計 TCPServer
tcpserver.cpp檔案 include common initsock.h include cinitsock initsock 初始化winsock庫 int main 填充sockaddr in結構 sockaddr in sin sin.sin family af inet sin.s...
WIN網路程式設計 IOCP服務程式 (
iocpserver.cpp檔案 ciocpserver類的測試程式 include iocp.h include include class cmyserver public ciocpserver void onconnectionclosing ciocpcontext pcontext,ci...
WIN網路程式設計 IOCP服務程式設計注意事項
iocp服務程式設計注意事項 記憶體資源管理 每個重疊的傳送或接收操作所提交的資料緩衝區很可能會鎖定。記憶體被鎖定之後,它不能從物理記憶體換出。但作業系統對 鎖定記憶體的數量 不是投遞的運算元量 有限制,如果伺服器預期處理大量的併發客戶,可以在每個連線上投遞乙個0位元組的接收操作,這樣不會有記憶體鎖...