計算機網(wǎng)絡(luò)實驗_第1頁
已閱讀1頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、計算機網(wǎng)絡(luò)課程設(shè)計,成績評定:,總評成績: 考勤20%+效果25%+提問25%+課設(shè)報告30% 中期檢查為周五,2,選題方式:,選題的題號:學號位數(shù)模5+1: 比如: 201503302 劉子豪 同學的選題為: 2%5+1=3 劉子豪同學的選題為第3題,3,題目:,題目1:基于TCP協(xié)議的簡易聊天機器人題目2:基于TC

2、P協(xié)議的通訊錄題目3:基于UDP協(xié)議的簡易聊天機器人題目4: 標準C語言實現(xiàn)簡單Web服務(wù)器題目5:標準c語言局域網(wǎng)文件傳輸題目6:標準c語言實現(xiàn)CGI通訊錄題目7:div+css網(wǎng)頁頁面效果制作,4,課程設(shè)計網(wǎng)站:http://keshe.zuoyexitong.com,課程設(shè)計內(nèi)容:,5,內(nèi)容一 Windows Socket 編程,內(nèi)容二 公共網(wǎng)關(guān)接口CGI,內(nèi)容三 DIV+CSS網(wǎng)頁效果制作,Windows Socket

3、 編程,課程設(shè)計目的Socket編程 常用API課程設(shè)計軟件,6,課程設(shè)計目的,通過編程了解 Client/Server 結(jié)構(gòu)的網(wǎng)絡(luò)通信模型掌握Socket機制的工作原理掌握基于Client/Server結(jié)構(gòu)的Windows Socket TCP/UDP程序設(shè)計方法,7,Client-Server 結(jié)構(gòu),在TCP/IP網(wǎng)絡(luò)環(huán)境下,不同主機上的兩個應(yīng)用程序通信普遍采用客戶端-服務(wù)器模型 (client-server a

4、rchitecture, C/S)Client在需要服務(wù)時向server提出申請Server等待client提出請求并予以相應(yīng)Server始終運行,監(jiān)聽網(wǎng)絡(luò)接口收到client請求啟動服務(wù)進程響應(yīng)客戶, 同時繼續(xù)監(jiān)聽服務(wù)窗口,保證后續(xù)的 client也能及時得到服務(wù),8,背景知識——Windows Socket是什么?,Windows Sockets是Microsoft Windows的網(wǎng)絡(luò)程序設(shè)計接口So

5、cket于1981年在BSD4.1 UNIX中提出客戶端/服務(wù)器模型,9,80年代初,美國國防部高級研究計劃局(ARPA)給UC Berkeley提供了資金,讓他們在UNIX操作系統(tǒng)下實現(xiàn)TCP/IP協(xié)議。在這個項目中,研究人員為TCP/IP網(wǎng)絡(luò)通信開發(fā)了一個API(應(yīng)用程序接口),這個API稱為Socket接口(套接字)。今天Socket接口是TCP/IP網(wǎng)絡(luò)最為通用的API,也是在Internet上進行應(yīng)用開發(fā)最為通用的API。

6、 90年代初,由Microsoft聯(lián)合其他幾家公司共同制定了一套Windows下的網(wǎng)絡(luò)編程接口,即Windows Socket規(guī)范。它是Berkeley Socket的重要擴充,主要是增加了一些異步函數(shù),并增加了符合Windows消息驅(qū)動特性的網(wǎng)絡(luò)事件異步選擇機制。WinSock規(guī)范是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。從1991年的1.0版到1995年的2.0.8版,經(jīng)過不斷完善,已成為Windows網(wǎng)

7、絡(luò)編程的事實上的標準。,Socket套接字,目標:學習如何建立客戶端/服務(wù)器應(yīng)用程序,使用套接字進行通信套接字(socket): 應(yīng)用進程之間的接口,實現(xiàn)端到端的傳輸協(xié)議,10,Socket是應(yīng)用層與TCP/IP協(xié)議棧通信的中間軟件抽象層,WinSock DLL,WinSock與操作系統(tǒng)的關(guān)系,11,,,,,,,應(yīng)用程序 1,應(yīng)用程序 2,網(wǎng)絡(luò)編程接口 ——如 WinSock API,網(wǎng)絡(luò)通信協(xié)議 ——如 TCP/IP協(xié)議,操作系統(tǒng)

8、——如 Windows,物理通信介質(zhì),,動態(tài)鏈接庫,16位版:WINSOCK.DLL32位版:WSOCK32.DLL,TCP套接字編程,服務(wù)器做好準備服務(wù)器進程必須首先運行服務(wù)器必須先創(chuàng)建socket等待處理客戶端的連接請求客戶端與服務(wù)器的聯(lián)系創(chuàng)建客戶端本地的TCP socket指明服務(wù)器進程的IP地址和端口號當客戶端創(chuàng)建socket后,客戶端的TCP socket與服務(wù)器TCP socket建立連接,12,服務(wù)器收到客

9、戶端連接請求后,創(chuàng)建新的socket用來與客戶端通信允許服務(wù)器與多個客戶端通信源端口號用來識別客戶端,TCP協(xié)議提供了客戶端和服務(wù)器之間可靠的,按次序的字節(jié)流傳輸,TCP套接字編程,如同中國移動的10086服務(wù)調(diào)用socket()建立一個套接口 (移動建立好一個電話總機)bind()將該接口和本地IP地址和Port綁定 (設(shè)定總機號為10086)listen()讓套接口做好偵聽準備 (隨時準備接聽電話)客戶在套接口建立起來之

10、后,便可調(diào)用connect()連接服務(wù)器指定的Port (用戶可撥打10086要求服務(wù))服務(wù)器調(diào)用accept()來接收客戶的連接請求 (一旦有電話就接起)服務(wù)器收到請求后,建立新的socket來對此連接服務(wù),原來的socket回到監(jiān)聽等待狀態(tài) (總機接電話后轉(zhuǎn)某分機服務(wù),本身繼續(xù)等待新的電話)連接建立后,send()和recv()來發(fā)送和接收數(shù)據(jù) (客戶與客服對話)數(shù)據(jù)傳送結(jié)束,調(diào)用closesocket()關(guān)閉套接口 (結(jié)束

11、請掛機),13,常用API,API (Application Programming Interface) 應(yīng)用程序接口DLL裝載WinSock服務(wù)由動態(tài)鏈接庫WinSock DLL提供,它完成WinSock的初始化任務(wù),協(xié)商WinSock的版本支持,并分配必要的資源。在使用WinSock API之前,必須調(diào)用WSAStartup函數(shù)對其進行初始化。int WSAStartup(WORD v, (LPWSADATA) &W

12、D)DLL卸載當不需WinSock DLL的服務(wù)時,釋放DLL所使用的資源,需調(diào)用WSACleanup函數(shù)終止對WinSock庫的使用int WSACleanup(),14,常用API,創(chuàng)建套接字: socket()綁定本地地址:bind()偵聽連接: listen()建立套接字連接:accept(), connect()面向連接的數(shù)據(jù)傳輸:send(), recv()關(guān)閉套接字:closesocket(),15

13、,常用API,Socket API 類別:可支持任意的底層協(xié)議族PF_INET : 用于互聯(lián)網(wǎng)編程PF_UNIX: 用于Unix 管道編程PF_PACKET:直接訪問網(wǎng)絡(luò)接口 (i.e, 繞過TCP / IP協(xié)議棧)兩種基本socket API分別支持兩種傳輸服務(wù):SOCK_STREAM: 可靠的,字節(jié)流服務(wù) (TCP)SOCK_DGRAM: 非可靠的數(shù)據(jù)報服務(wù) (UDP)應(yīng)用案例客戶端從鍵盤讀取一行字符(數(shù)據(jù))并將該

14、數(shù)據(jù)發(fā)送到服務(wù)器;服務(wù)器接收數(shù)據(jù)后并顯示在屏幕上。,16,示例: C客戶端 (TCP),#include #include #include #include #include #define SERVER_PORT 5432#define MAX_LINE 256int main(int argc, char * argv[]){ WSADATA WSAData; int WSAreturn;

15、 struct hostent *hp; struct sockaddr_in sin; char *host; char buf[MAX_LINE]; int s; int len;,17,Socket編程庫文件,,,示例: C客戶端 (TCP),if (argc==2) {host = argv[1]; } else {fprintf(stderr, &q

16、uot;usage: simplex-talk host\n");exit(1); }WSAreturn = WSAStartup(0x101,&WSAData);if(WSAreturn){ fprintf(stderr, "simplex-talk: WSA error.\n");exit(1);} /* trans

17、late host name into peer’s IP address */hp = gethostbyname(host);if (!hp) {fprintf(stderr, "simplex-talk: unknown host: %s\n", host);exit(1); }/* build address data structure */ memset((char *

18、)&sin, 0, sizeof(sin)); memcpy((char *)&sin.sin_addr, hp->h_addr, hp->h_length); sin.sin_family = AF_INET; sin.sin_port = htons(SERVER_PORT);,18,將遠程主機的名稱轉(zhuǎn)換成IP地址,,,參數(shù)初始化,,,程

19、序參數(shù)處理,,,WinSock的初始化,,,示例: C客戶端 (TCP),/* active open */if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {perror("simplex-talk: socket");exit(1); }if (connect(s, (struct sockaddr *)&sin, sizeo

20、f(sin)) < 0) {perror("simplex-talk: connect falied");close(s);exit(1); } fprintf(stderr, "client is connecting to %s\n", host);/* main loop: get and send lines of text */

21、while (fgets(buf, sizeof(buf), stdin)) {buf[MAX_LINE-1] = ’\0’;len = strlen(buf) + 1;send(s, buf, len, 0);}WSACleanup();return 1;},19,創(chuàng)建 客戶端socket,從屏幕讀取字符串,,,,,連接服務(wù)器,,,示例: C服務(wù)器(TCP),#include #include

22、#include #include #define SERVER_PORT 5432#define MAX_PENDING 5#define MAX_LINE 256int main(){ WSADATA WSAData; int WSAreturn; /* server address */ struct sockaddr_in sin; struct sockaddr_in r

23、emote; char buf[MAX_LINE]; int len; int s, new_s;WSAreturn = WSAStartup(0x101,&WSAData);if(WSAreturn){ fprintf(stderr, "simplex-talk: WSA error.\n");exit(1);},20,Socket編程庫文件,,,

24、WinSock的初始化,,,示例: C服務(wù)器(TCP),/* build address data structure */ memset((char *)&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(SERVER_PORT); /

25、* setup passive open */ if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {perror("simplex-talk: socket failed.");exit(1); } if ((bind(s, (struct sockaddr *)&sin, sizeof(sin))) < 0) {

26、perror("simplex-talk: bind failed.");exit(1); } printf("server is ready in listening ...\n"); listen(s, MAX_PENDING); /* wait for connection, then receive and print text */

27、 while(1) { len = sizeof(struct sockaddr_in); if ((new_s = accept(s, (struct sockaddr *)&remote, &len)) < 0){ perror("simplex-talk: accept failed."); exit(1);

28、 },21,服務(wù)socket等待客戶端連接,創(chuàng)建服務(wù)客戶端的Socket,并讀取信息,,,,,在端口5432創(chuàng)建歡迎 socket,,,示例: C服務(wù)器(TCP),printf("received a connection from %s : \n", inet_ntoa(remote.sin_addr)); while (len = recv(new_s, buf, sizeof

29、(buf), 0)) { //printf("received %2d chars:", len); fputs(buf, stdout); } close(new_s); } WSACleanup();return 1;},22,服務(wù)器將信息顯示在屏幕上,,,while循環(huán)結(jié)束,等待另外的客戶端連接,,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論