基于cs結(jié)構(gòu)的套接字程序設計(tcp)_第1頁
基于cs結(jié)構(gòu)的套接字程序設計(tcp)_第2頁
基于cs結(jié)構(gòu)的套接字程序設計(tcp)_第3頁
基于cs結(jié)構(gòu)的套接字程序設計(tcp)_第4頁
基于cs結(jié)構(gòu)的套接字程序設計(tcp)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機網(wǎng)絡課程設計 基于c/s結(jié)構(gòu)的套接字程序設計(tcp) 學院:信息技術(shù)工程學院 班級:計科1011班 姓名:周玲玲 學號: 02210101140 指導老師: 黃彥目錄 1、引言-1 課題目的及要求-2 研究設想-2 相關(guān)理論-2 預期結(jié)果-2 2、關(guān)鍵詞-2 3、正文-3 理論基礎-3 設計方法及思路-3 編程方法-4 主要內(nèi)容及其分析-6 實驗結(jié)果及對其討論-9 4、結(jié)論-10 核心-10 難點-10 問題-10不足及對其改進-105、致謝-11 6、參考文獻-11 引言基于c/s結(jié)構(gòu)的套接字程序設計(tcp)1、目的及要求(1)目的和意義通過編程了解c/s結(jié)構(gòu)的網(wǎng)絡通信模型;掌握基

2、于c/s結(jié)構(gòu)的windows socket tcp的程序設計方法。(2)基本要求按照c/s模型編寫兩個程序。一個為客戶端程序,另一是服務器端程序;對于c/s兩端都應輸出必要的日志、出錯或診斷信息。(3)小組人數(shù):22、研究設想 能夠?qū)崿F(xiàn)當客戶端向服務器端發(fā)送請求時,服務器端能夠向客戶端傳送數(shù)據(jù)。3、相關(guān)理論 tcp是一種面向鏈接的,可靠的傳輸協(xié)議。tcp協(xié)議在網(wǎng)絡層ip協(xié)議的基礎上,向應用層用戶進程提供可靠地全雙工的數(shù)據(jù)流傳輸。并且通過創(chuàng)建的流式套接字實現(xiàn)服務器端與客戶端的數(shù)據(jù)傳送。4、預期結(jié)果 實現(xiàn)服務器端與客戶端的數(shù)據(jù)傳送。關(guān)鍵詞流式套接字;tcp/ip;服務器/客戶端; 正文1、理論基礎

3、應用層通過傳輸層進行數(shù)據(jù)通信時,tcp會遇到同時為多個應用程序進程提供并發(fā)服務的問題。多個tcp連接或多個應用程序進程可能需要通過同一個tcp協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應用程序進程和連接,許多計算機操作系統(tǒng)為應用程序與tcpip協(xié)議交互提供了稱為套接字(socket)的接口,區(qū)分不同應用程序進程間的網(wǎng)絡通信和連接。網(wǎng)絡化的應用程序在開始任何通訊之前都必需要創(chuàng)建套接字。socket可以看成在兩個程序進行通訊連接中的一個端點,一個程序?qū)⒁欢涡畔懭雜ocket中,該socket將這段信息發(fā)送給另外一個socket中,使這段信息能傳送到其他程序中。套接字,是支持tcp/ip的網(wǎng)絡通信的基本操作

4、單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程。流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務。該服務將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復發(fā)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務,原因在于其使用了傳輸控制協(xié)議,即tcp(the transmission control protocol)協(xié)議。2、設計方法及思路客戶機與服務器建立連接,連接是通過申請的套接字實現(xiàn)的客戶打開一個套接字并把它約束在一個端口上如果成功就相當于建立一個虛擬文件以后就可以在虛擬文件上寫數(shù)據(jù)并通過網(wǎng)絡向外傳送,完成連接后就可以通信了。客戶機

5、向服務器發(fā)送請求,打開一個連接后,客戶機把請求消息送到服務器的停留端口上,完成提出請操作。服務器在處理完客戶的請求之后,要向客戶機發(fā)送響應消息。客戶和服務器雙方都可以通過關(guān)閉套接字來結(jié)束tcp/ip對話。當使用tcp/ip協(xié)議一發(fā)客戶服務器服務程序時,服務器需要等待任意數(shù)量客戶端的連接,以便以他們提供服務??蛻舳诉B接服務器時,必須先知道服務器的名稱。在tcp/ip中,就是服務器的ip地址和端口號。bind()函數(shù)實現(xiàn)將服務器綁定到一個已知的名字上的功能。接下來要將服務器套接字設置為監(jiān)聽狀態(tài),這是通過listen()函數(shù)完成的。在監(jiān)聽狀態(tài)下,如果客戶端向服務器發(fā)起連接請求,服務器通過調(diào)用acce

6、pt()函數(shù)來接受該接連請求。服務器與客戶端完成連接后,就可以進行數(shù)據(jù)通信了。對客戶端來說,首先調(diào)用connect()函數(shù)向服務器發(fā)出連接請求。如果服務器接受了該請求,接下來就可以與服務器通信了。開發(fā)套接字應用程序時,首先應進行windows sockets的初始化,加載windows sockets的實現(xiàn),然后創(chuàng)建套接字,對tcp套接字來說,需要在socket()函數(shù)或都wsasocket()函數(shù)中指明sock_stream套接字類型。當服務器和客戶端通信結(jié)束時,關(guān)閉套接字,釋放windows sockets的實現(xiàn)。流程如下:服務器:創(chuàng)建套接字綁定監(jiān)聽接受連接收發(fā)數(shù)據(jù)關(guān)閉客戶端:創(chuàng)建套接字連

7、接收發(fā)數(shù)據(jù)關(guān)閉3、編程方法tcp/tp流式套接字的編程步驟 (客戶端程序 ) 1)加載套接字庫2)創(chuàng)建套接字(socket)。3)向服務器發(fā)出連接請求(connect)。4)和服務器端進行通信(send/recv)。5)關(guān)閉套接字。socket-connect-send/recv 我的客戶端所要用到的主要函數(shù)是recv()函數(shù)recv()函數(shù)和wsarevc()函數(shù)用于接受數(shù)據(jù)。recv()函數(shù)聲明如下:int recv(socket s,char far* buf,int len,int flags);send()函數(shù)send()和wsasend()函數(shù)用于發(fā)送數(shù)據(jù)。send()函數(shù)聲明如下

8、:int send(socket s,const char far* buf,int len,int flags);connect()函數(shù)connect()函數(shù)實現(xiàn)連接服務器功能。該函數(shù)聲明如下:int connect(socket s,const struct sockaddr far* name,int namelen);closesocket()函數(shù)closesocket()函數(shù)關(guān)閉套接字,釋放后占資源。該函數(shù)聲明如下:int closesocket(socket s);4、主要內(nèi)容及對其分析客戶端源程序#include #include#include #include #includ

9、e #pragma comment(lib,ws2_32.lib)int main()wsadata wsadata;socket clientsocket;sockaddr_in serveraddr;int serverport=4000;char serveripaddr50=127.0.0.1;char*senddata=i am a client.n please send me a string of data!;char receivebuffer1024;int sendlength=-1;int result=-1;if(result=wsastartup(makeword(

10、2,2),&wsadata)!=0)printf(wsastartup failed with error%dn,result);return 0;/1.socket建立客戶端流式套接字,返回套接字號clientsocket=socket(af_inet,sock_stream,ipproto_tcp);/創(chuàng)建客戶端套接字if(clientsocket0)printf(socket failed with error%dn,wsagetlasterror();return 0;memset(&serveraddr,0,sizeof(serveraddr);serveraddr.sin_fami

11、ly=af_inet; /地址簇serveraddr.sin_port=htons(serverport);/同服務器端端口地址serveraddr.sin_addr.s_addr=inet_addr(serveripaddr);/服務器端ip地址/2.將套接字與服務器建立連接result=connect(clientsocket,(sockaddr*)&serveraddr,sizeof(serveraddr);/將套接字與服務器建立連接if(result0)printf(connect failed with error%dn,wsagetlasterror();return 0;/3.發(fā)

12、送請求給服務器sendlength=send(clientsocket,senddata,strlen(senddata),0);/在套接字上發(fā)送信息if(sendlength0)printf(send failed with error%dn,wsagetlasterror();return 0;else printf(發(fā)送的信息:%sn,senddata);int receivelen;/4.接收服務器發(fā)來的數(shù)據(jù)domemset(receivebuffer,0,sizeof(receivebuffer);receivelen=recv(clientsocket,receivebuffer,

13、sizeof(receivebuffer),0);if(receivelen0)/在套接字上接受信息printf(receive failed with error %dn,wsagetlasterror();return 0;elseprintf(接收的信息:%sn,receivebuffer);while(receivelen!=0);if(closesocket(clientsocket)=socket_error)/關(guān)閉客戶端套接字printf(closesocket failed with error%dn,wsagetlasterror();if(wsacleanup()=sock

14、et_error)/注銷,并釋放資源printf(wsacleanup failed with error%dn,wsagetlasterror(); system(pause); return exit_success;當客戶端已經(jīng)與服務器建立連接后,那么我的客戶端程序就可以向服務器端發(fā)送數(shù)據(jù)請求,等待服務器響應,之后將接受客戶端發(fā)送過來的數(shù)據(jù),當完成數(shù)據(jù)接受后,可以關(guān)閉連接。5、實驗結(jié)果及對其討論服務器端發(fā)送數(shù)據(jù),客戶端能夠成功地接受數(shù)據(jù)結(jié)論我們組這次做的課題的核心就是通過套接字在客戶端和服務器之間建立連接,在建立連接之后實現(xiàn)客戶端與服務器之間的通信,難點是在設計程序方面,既因為涉及相關(guān)函

15、數(shù)的調(diào)用,又因為我開始對套接字的應用不熟悉。這里面涉及些問題什么是套接字,什么是流式套接字,為什么用流式套接字。套接字,是支持tcp/ip的網(wǎng)絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程,它的存在是為了區(qū)別不同應用程序進程間的網(wǎng)絡通信和連接。流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務,又因為該服務將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復發(fā)送,并按順序接收,所以用了流式套接字。我們做的課題不足之處是不能實現(xiàn)雙向傳送數(shù)據(jù),還需要設計客戶端向服務器端的數(shù)據(jù)傳送,那么就需要在客戶端程序中設計監(jiān)聽,接受服務器端的請求信息,以及向服務端發(fā)送數(shù)據(jù)這幾部分。致謝真誠感謝黃彥老師您在我們課程設計階段給予我們的指導和幫助,您的指導使我對網(wǎng)絡專業(yè)知識方面有了更深的認識,并且您嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,精益求精的工作作風,深

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論