計(jì)算機(jī)網(wǎng)絡(luò)實(shí)驗(yàn)_第1頁
已閱讀1頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、絡(luò)編程的事實(shí)上的標(biāo)準(zhǔn)。,Socket套接字,目標(biāo):學(xué)習(xí)如何建立客戶端/服務(wù)器應(yīng)用程序,使用套接字進(jìn)行通信套接字(socket): 應(yīng)用進(jìn)程之間的接口,實(shí)現(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ì),,動(dòng)態(tài)鏈接庫,16位版:WINSOCK.DLL32位版:WSOCK32.DLL,TCP套接字編程,服務(wù)器做好準(zhǔn)備服務(wù)器進(jìn)程必須首先運(yùn)行服務(wù)器必須先創(chuàng)建socket等待處理客戶端的連接請(qǐng)求客戶端與服務(wù)器的聯(lián)系創(chuàng)建客戶端本地的TCP socket指明服務(wù)器進(jìn)程的IP地址和端口號(hào)當(dāng)客戶端創(chuàng)建socket后,客戶端的TCP socket與服務(wù)器TCP socket建立連接,12,服務(wù)器收到客

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

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

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

12、D)DLL卸載當(dāng)不需WinSock DLL的服務(wù)時(shí),釋放DLL所使用的資源,需調(diào)用WSACleanup函數(shù)終止對(duì)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ù)報(bào)服務(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,將遠(yuǎn)程主機(jī)的名稱轉(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論