【正文】
ClientServer模式的產(chǎn)生原因及其功能 Socket接口及其在 ClientServer模式中的執(zhí)行模式 作業(yè) 。以后應(yīng)用程序就可以調(diào)用所請(qǐng)求的Socket庫中的其它 Socket函數(shù)了。 該函數(shù)的第一個(gè)參數(shù)指明程序請(qǐng)求使用的Socket版本,其中高位字節(jié)指明副版本、低位字節(jié)指明主版本; 操作系統(tǒng)利用第二個(gè)參數(shù)返回請(qǐng)求的 Socket的版本信息。wsaData )。 例:假如一個(gè)程序要使用 Socket,那么程序代碼如下 wVersionRequested = MAKEWORD( 2, 1 )。 TCP/IP網(wǎng)絡(luò), 增加了對(duì)更多協(xié)議的支持。 WinSock也是一個(gè)基于 Socket模型的 API,在Microsoft Windows操作系統(tǒng)類中使用。y, 10 ) 地址轉(zhuǎn)換函數(shù) atoi() 網(wǎng)絡(luò)信息查詢函數(shù) Gethostbyname() 關(guān)于主機(jī)的信息 地址長(zhǎng)度 WinSock Socket接口是網(wǎng)絡(luò)編程(通常是 TCP/IP協(xié)議,也可以是其他協(xié)議)的 API。 例如: memcmp(amp。x,amp。x, 0, sizeof(x) ) 字節(jié)操縱函數(shù) 2. Memcpy: 將一個(gè)字段的值復(fù)制到另一個(gè)字段,第一個(gè)變量是指向目的地的指針,第二個(gè)變量是指向源的指針,第三個(gè)變量是字節(jié)數(shù)。 附錄 1. Memset: 將一個(gè)指明的字節(jié)數(shù)設(shè)置為一個(gè)值,第一個(gè)變量是指針,它指向目的地,第二個(gè)變量是它的值,第三個(gè)變量是字節(jié)數(shù)。 ?無連接服務(wù) ?面向連接服務(wù) ?Relationship between the client and the server 重復(fù)服務(wù)器在一個(gè)時(shí)間只能和一個(gè)客戶程序建立連接,它對(duì)多個(gè)客戶程序的處理是采用循環(huán)的方式重復(fù)進(jìn)行,因此叫重復(fù)服務(wù)器。 參數(shù) b u ff e r表示用來存放接收到的數(shù)據(jù)的內(nèi)存地址, 參數(shù) l e n g t h則表示這個(gè)緩沖區(qū)的大小。 參數(shù) d a t a是待發(fā)送數(shù)據(jù)在內(nèi)存中的地址, 參數(shù) l e n g t h是一個(gè)整型數(shù),表示數(shù)據(jù)的字節(jié)數(shù), 參數(shù) f l a g則包含了請(qǐng)求特殊選項(xiàng)的位(許多選項(xiàng)是為系統(tǒng)調(diào)試設(shè)計(jì)的,并不能被普通的客戶和服務(wù)器程序使用)。常用的調(diào)用有 send()和 recv()。 accept()用于使服務(wù)器等待來自某客戶進(jìn)程的實(shí)際連接。若采用無連接,客戶方必須使用 bind()以獲得一個(gè)唯一的地址。 socket()指定五元組中的協(xié)議元,它的用法與是否為客戶或服務(wù)器、是否面向連接無關(guān)。 參數(shù) s a d d r e s s l e n是以字節(jié)形式說明的服務(wù)器地址的長(zhǎng)度。 1 if error 參數(shù) s o c k e t是客戶端計(jì)算機(jī)上用于該連接的插口的描述符。 同時(shí),服務(wù)器原始的插口保持不變 — 在服務(wù)器結(jié)束與一個(gè)客戶的通信后,它使用這個(gè)原始的插口來接收下一個(gè)客戶的連接。 a c c e p t為該連接創(chuàng)建一個(gè)新的插口,并將這個(gè)新的插口描述符返回給調(diào)用者。 The Accept Procedure The accept function is called by a TCP server to remove the first connection request from the corresponding queue. If there are no requests (the queue is empty), the accept function is put to sleep. a c c e p t調(diào)用的形式為: newsock = accept( socket, caddress, caddresslen) 參數(shù) s o c k e t是服務(wù)器已經(jīng)創(chuàng)建并綁定于指定協(xié)議端口的插口描述符。 1 if error. 調(diào)用 listen()是服務(wù)器接收一個(gè)連接請(qǐng)求的四個(gè)步驟中的第三步。 用于限制排隊(duì)請(qǐng)求的個(gè)數(shù),目前允許的最大值為 5。 大數(shù)在前的字節(jié)順序( Bigendian byte order) 主機(jī)中的字節(jié)順序( 1) 小數(shù)在前的字節(jié)順序( Littleendian byte order) 主機(jī)中的字節(jié)順序( 2) TCP/IP協(xié)議族選擇的是大數(shù)在前的字節(jié)順序 The Listen Procedure The listen function is called only by the TCP server. It creates a passive socket from an unconnected socket. Before calling the listen function,the socket must already be created and the local socket address fields set. This function informs the operating system that the server is ready to accept connection through this socket. 監(jiān)聽連接 ── listen() 此調(diào)用用于面向連接服務(wù)器,表明它愿意接收連接。為保證數(shù)據(jù)的正確性,在網(wǎng)絡(luò)協(xié)議中須指定網(wǎng)絡(luò)字節(jié)順序。 例如, UNIX BSD有一組描述 socket