元宇聰
(泉州師范學(xué)院軟件學(xué)院)
C++是在C 語(yǔ)言的基礎(chǔ)上開(kāi)發(fā)的一種通用編程語(yǔ)言,應(yīng)用廣泛。C++支持多種編程范式,如面向?qū)ο缶幊?、泛型編程、面向過(guò)程編程、函數(shù)式編程等。最新正式標(biāo)準(zhǔn)C++14 于2014 年8 月18 日公布。正式名稱為ISO/IEC 14882:2014。其編程領(lǐng)域眾廣,常用于系統(tǒng)開(kāi)發(fā)、引擎開(kāi)發(fā)等應(yīng)用領(lǐng)域,是迄今為止最受人們受用的最強(qiáng)大編程語(yǔ)言之一。
標(biāo)準(zhǔn)模板庫(kù)(Standard Template Library)是惠普實(shí)驗(yàn)室開(kāi)發(fā)的一系列軟件的統(tǒng)稱,是類(lèi)庫(kù)和函數(shù)的集合?,F(xiàn)在是C++的一部分,由C++標(biāo)準(zhǔn)委員會(huì)制定,并不斷維護(hù)更新。
視窗操作系統(tǒng)應(yīng)用程序接口(Windows Application Programming Interface)是微軟對(duì)于視窗操作系統(tǒng)中可用的核心應(yīng)用程序編程接口的名稱。它被設(shè)計(jì)為各種語(yǔ)言的程序調(diào)用,也是應(yīng)用軟件與視窗系統(tǒng)最直接的交互方式。
視窗套接字(Windows Socket)是網(wǎng)絡(luò)通信的基本構(gòu)件,是視窗操作系統(tǒng)下得到廣泛應(yīng)用、開(kāi)放、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。20 世紀(jì)90 年代初,微軟和第三方廠商共同制訂了一套標(biāo)準(zhǔn),即視窗套接字規(guī)范,簡(jiǎn)稱WinSock。一個(gè)套接字就是一個(gè)通信標(biāo)識(shí),由一個(gè)短整數(shù)表示,實(shí)際上就是一個(gè)句柄,代表網(wǎng)絡(luò)協(xié)議中的一組數(shù)據(jù),該數(shù)據(jù)包含了通信雙方的因特網(wǎng)協(xié)議地址和當(dāng)前的連接狀態(tài)等信息。
視窗套接字使用客戶端/服務(wù)器模型。一個(gè)服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽(tīng)對(duì)服務(wù)的請(qǐng)求,此時(shí)服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶對(duì)這個(gè)服務(wù)的地址提出了連接請(qǐng)求。在這個(gè)時(shí)刻,服務(wù)程序被“驚醒”并且為客戶提供服務(wù)——對(duì)客戶的請(qǐng)求做出適當(dāng)?shù)姆磻?yīng)。
這是一個(gè)控制臺(tái)程序,用一個(gè)循環(huán)讓用戶輸入內(nèi)容,程序?qū)τ脩糨斎氲膬?nèi)容進(jìn)行判斷,之后繼續(xù)循環(huán)。
程序把“/”開(kāi)頭的字符串都當(dāng)作命令,然后對(duì)命令進(jìn)行分析,根據(jù)不同的命令實(shí)現(xiàn)對(duì)程序的控制。有些命令包含多個(gè)參數(shù),參數(shù)寫(xiě)在命令后面,用空格隔開(kāi)。如果用戶輸入不存在的命令則提示錯(cuò)誤。
程序把非“/”開(kāi)頭的字符串都當(dāng)作聊天內(nèi)容,在建立連接之后會(huì)把輸入內(nèi)容發(fā)送給對(duì)方。
(1)服務(wù)器偵聽(tīng)。用戶輸入“/偵聽(tīng)”命令,參數(shù)1 為偵聽(tīng)的端口號(hào),執(zhí)行之后程序開(kāi)始偵聽(tīng)。偵聽(tīng)時(shí)會(huì)阻塞主線程的執(zhí)行然后等待客戶端的連接,一旦收到客戶端的連接請(qǐng)求,才繼續(xù)運(yùn)行并建立連接。
(2)客戶端連接。用戶輸入“/連接”命令,參數(shù)1 為服務(wù)器的地址,參數(shù)2 為服務(wù)器偵聽(tīng)的端口號(hào),命令檢查無(wú)誤并執(zhí)行之后,開(kāi)始嘗試與服務(wù)器連接。連接時(shí)會(huì)阻塞主線程的執(zhí)行然后等待服務(wù)器的回應(yīng)。當(dāng)客戶端收到服務(wù)器的回應(yīng)時(shí),建立連接。
(3)斷開(kāi)連接。建立連接后,任意一端都可以隨時(shí)斷開(kāi)連接。其中一端斷開(kāi)連接時(shí),另一端在接收數(shù)據(jù)時(shí)會(huì)偵測(cè)到并斷開(kāi)連接。
建立連接后,服務(wù)器和客戶端同時(shí)是發(fā)送者和接收者,發(fā)送者向接收者發(fā)送文本,接收者收到內(nèi)容后在屏幕上顯示文本。
發(fā)送過(guò)程在主線程,接收過(guò)程在接收線程。發(fā)送和接收可以同時(shí)進(jìn)行,互不干擾。