Windows網路程式設計(九):訊息選擇模型
概述
之前介紹過,系統提供了幾種網路模型用於非同步的網路互動,訊息選擇模型就是其中一種。
這種模型的使用需要在呼叫完socket()函式以後呼叫WSAAsyncSelect(),這個函式的宣告如下:
int WSAAsyncSelect(SOCKET s,HWND hWnd,u_int wMsg,long lEvent)
s:需要使用非同步模式的套接字
wMsg:使用者自定義的訊息,這個自定義訊息可以是WM_USER + 200,通過將這個訊息跟回撥函式對映,可以在接收到非同步訊息時進入回撥函式
hWnd:需要提供一個視窗用於接收非同步訊息的視窗,可以使用GetSafeHwnd()
lEvent:需要非同步監聽的事件型別,常見的型別有FD_ACCEPT\FD_WRITE\FD_READ等
呼叫完WSAAsyncSelect()函式以後就可以等待非同步訊息了。
例項程式碼
訊息選擇網路模型【例項程式碼】下載:https://download.csdn.net/download/tutucoo/10791234
相關推薦
Windows網路程式設計(九):訊息選擇模型
概述 之前介紹過,系統提供了幾種網路模型用於非同步的網路互動,訊息選擇模型就是其中一種。 這種模型的使用需要在呼叫完socket()函式以後呼叫WSAAsyncSelect(),這個函式的宣告如下: int WSAAsyncSelect(SOCKET s,HWND h
Windows網路程式設計(五):多執行緒訊息處理
對於服務端來說,呼叫accept()函式同意客戶端連線的請求後,需要處理完與這個客戶端的通訊後回到accept()繼續等待下一個客戶端的連線,如果一個客戶端請求連線時服務端並沒有在accept()處等待,客戶端是無法成功連上服務端的,因此併發客戶端連線的服務端必然是多執行緒的。 服務
Windows網路程式設計(四):建立UDP連線和收發訊息
UDP訊息的傳送和接收需要UDP連線,所以,上面的TCP連線已經不適用了,具體的區別主要有: 建立Socket時引數不同建立服務端時不需要listen和accept操作建立客戶端時不需要connect操作伺服器需要bind操作,客戶端不需要。 傳送和接收UDP訊息要用到sendt
Windows網路程式設計(三):建立TCP連線和收發訊息
先看服務端: // ConsoleApplication3.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #define _WINSOCK_DEPRECATED_NO_WARNINGS //這個宣告要在stdafx.h的後面,但要
Windows網路程式設計(八):非阻塞模式(非同步模式)
前面幾篇文章介紹的無論是TCP通訊還是UDP通訊都是阻塞式的,它們在執行recv或recvfrom時會線上程中等待,直到接收到資訊為止,所以在應用的時候一般都需要開闢子執行緒,在子執行緒裡專門做這類事情,不然它會影響主執行緒的執行。 系統提供三種網路模型
Windows網路程式設計(七):原始套接字開發
在呼叫socket()函式時,如果將第二個引數填為SOCK_RAW,代表建立的是原始套接字型別,第三個引數可以選擇IPPROTO_ICMP、IPPROTO_TCP、IPPROTO和IPPROTO_RAW。 #include <winsock2.h> #pragma co
Windows網路程式設計(六):IP Helper
IP Helper是Windows系統與IP配置和管理的重要介面,通過IP Helper 可以獲得很多跟網路配置相關的資訊。比如說本機IP、閘道器設定、網絡卡數量和連線資訊。 #include <windows.h> #include "iphlpapi.h" /* 全域
Windows網路程式設計(二):Socket簡介
Socket簡介 Socket被稱為套接字,描述了IP和埠等資訊,是一個通訊鏈的控制代碼。 微軟專門開發了一套支援多種網路協議的網路程式設計介面,叫做Winsock,Winsock是Windos SDK的一部分,全稱Windows Sockets API。它對多種協議做了封裝,S
Windows網路程式設計(一):TCP/IP協議
概述 這個協議是一個四層協議: 應用層,主要協議有HTTP、FTP等 傳輸層,主要協議有TCP、UDP等 網路層,主要協議有IP等 鏈路層,主要協議有ICMP等 下層中的協議總是為上層中的協議服務的,比如說應用層的HTTP、FTP協議都是基於T
Linux網路程式設計(5):I/O模型
這一部分的內容本來應該作為第四部分內容,置於上一講之中的。由於當時自己學習時也存在很大的困惑,邊學邊用,因此造成了知識體系的不連貫性。我們開始學習吧。 (1)什麼是I/O複用(I/O multiplexing)呢? 當你編寫的程式需要同時處理多
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win
c++ 網路程式設計(九)TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端
原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html 先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大
網路程式設計(一):埠那些事兒
TCP和UDP協議都存在一個叫做埠的東西,但埠卻不是IP協議的一部分。 埠被設計出來主要是為了給協議棧和應用對應: 協議棧用埠號將資料分配給不同的應用層程式 應用層程式用埠號去區分不同的連線,參見之前提到過的“四元組” TCP和UDP協議都使用了埠號(Port num
Java網路程式設計(2):TCP和UDP
1、多執行緒“服務端-客戶端” TCP客戶端使用Socket來連線伺服器和與伺服器通訊。以下為在主執行緒中將使用者輸入傳送給服務端,在建立的執行緒中將服務端發回的資料輸出來: import java.net.*; import java.io.*; class Cl
Java 網路程式設計(1):使用 NetworkInterface 獲得本機在區域網內的 IP 地址
原文地址:https://segmentfault.com/a/1190000007462741 1、問題提出 在使用 Java 開發網路程式時,有時候我們需要知道本機在區域網中的 IP 地址。很常見的一種做法是呼叫本地命令(比如 Windows 上的 ipconfig 命令和 Li
Linux網路程式設計(一):一個簡單的socket程式
伺服器: /* *tcp_server.c */ #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include
大學生學程式設計(九):小白如何學好Linux?
首先我們還是來普及以下概念,講點虛的。 現在是圖形系統的天下,windows我們用了20多年了。成功歸功與它圖形介面,你會點滑鼠嗎你會敲鍵盤嗎?所以你會上網會聊天會玩遊戲了。 第一步:開始當然是選個linux系統版本,有環境才能玩,沒環境你說個啥? 加學習群892643663獲取
Python網路爬蟲(九):爬取頂點小說網站全部小說,並存入MongoDB
前言:本篇部落格將爬取頂點小說網站全部小說、涉及到的問題有:Scrapy架構、斷點續傳問題、Mongodb資料庫相關操作。 背景: Python版本:Anaconda3 執行平臺:Windows IDE:PyCharm 資料庫:MongoDB 瀏
詳解深度學習之經典網路架構(九):DPN(Dual Path Network)
目錄 0、簡介 1、優勢 3、總結 0、簡介 論文:Dual Path Networks 演算法詳解: 介紹的duall path networks(DPN)是顏水成老師新作,2017年4月在arxiv上放出,對於影象分類的效果有一定提升。我們知
Linux網路程式設計(1):如何使用"unp.h"
俗話說萬事開頭難,學習新知識也是如此,當我們下定決心要實現UNP中的例子時,發現卻無法將程式部署上去,這種感覺是不是很令人沮喪?本文就是用來給我自己這種linux菜鳥掃盲用的。 首先,UNP的原始碼連結為 點選開啟連結,下載完成後使用tar -zxvf命令進行解壓。 $