MFC實現udp服務端的單執行緒接受資料

2021-10-23 19:30:05 字數 1787 閱讀 6001

第一步:建立乙個基於對話方塊的mfc工程

第二部:建立乙個新的類recvparam用於接受主線程的控制代碼和套接字

第三步:新建乙個新的按鈕用來啟動多執行緒,設定名字和id

第四步:雙擊編寫該按鈕的函式

1.套接字版本初始化

word wvesionrequested; // 儲存winsock庫的版本號

wsadata wsadata;

int err;

wvesionrequested = makeword(1,1); // 請求版本號的word值

err = wsastartup(wvesionrequested, &wsadata);

if(err != 0)

if (lobyte(wsadata.wversion)!=1 || hibyte(wsadata.wversion!=1))

2.初始化套接字

socket socksrv = socket(af_inet, sock_dgram, 0);

3.繫結

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(6000);

bind(socksrv,(sockaddr*)&addrsrv,sizeof sockaddr);

4.建立接受資料多執行緒

handle hthread = createthread(null,0,recvproc,(lpvoid)precvparam,0,null);

5.關閉套接字

closesocket(m_socket);

上面個這些是實現函式,需要修改才能使用。

第五步:編寫執行緒處理函式(在cadodlg類裡面宣告該函式為靜態函式)

::postmessage(hwnd,wm_recvdata, 0, (lparam)tempbuf); // 顯示每條資料

}return 0;

}第六步:繫結wm_recvdata巨集的函式

1.在resource.h 標頭檔案定義巨集

2.在cadodlg類標頭檔案中 新增函式說明

3.在cadodlg類cpp檔案中新增訊息對映

3.實現該函式

void cadodlg::onrecvdata(wparam wparam, lparam lparam)

Soket程式設計 客戶端 服務端單執行緒通訊

客戶端 匯入socket模組 import socket 建立socket物件 clientsocket socket.socket socket.af inet,socket.sock stream 獲取本機ip位址 host socket.gethostbyname socket.gethost...

基於UDP的服務端 客戶端

udp套接字的特點 udp提供的是不可靠的傳輸服務。如果只考慮可靠性tcp要優於udp,但是udp的結構要比tcp更簡潔。udp不會傳送ack的應答資訊,也不會像seq那樣給資料分配序號。因此,udp效能有時比tcp高出很多。程式設計實現簡單。可靠性雖然不及tcp,但也不會像想象中那麼頻繁的資料損毀...

單執行緒的redis如何實現阻塞佇列

從redis的api可以了解到lpop,rpop可以實現乙個阻塞式佇列。那疑問就來了,redis不是單執行緒的嗎,如果阻塞了,那其他操作就執行不了呀。事實不是這樣的 redis的執行緒模型,是接收客戶端命令的執行緒時 i o 多路復用的,再通過檔案事件分配器單執行緒執行的。如下圖,程式總是會將所有產...