版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ)課程設(shè)計(jì)報(bào)告</p><p> 題 目: UDP服務(wù)器設(shè)計(jì) </p><p> 學(xué)生姓名: </p><p> 學(xué) 號: </p><p> 專業(yè)班級: 10計(jì)科(2
2、)班 </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)時(shí)間: 2012年下學(xué)期第18周 </p><p> 一、課程設(shè)計(jì)的目的和意義</p><p> UDP是TCP/IP協(xié)議族為傳輸層設(shè)計(jì)的兩個(gè)協(xié)議之一,它在進(jìn)程與進(jìn)程的通信過程中,提供了有
3、限的差錯校驗(yàn)功能,是一種無連接的,不可靠的協(xié)議。UDP在一個(gè)較低的水平上完成進(jìn)程之間的通信,在收到分組的時(shí)候沒有流量控制機(jī)制也沒有確認(rèn)機(jī)制,適用于可靠性比較高的局域網(wǎng)。由于UDP采取了無連接的方式,因此協(xié)議簡單,在一些特定的應(yīng)用中協(xié)議運(yùn)行效率高。UDP適合一些實(shí)時(shí)的應(yīng)用,如IP電話,視頻會議,它們要求源主機(jī)以恒定的速率發(fā)送數(shù)據(jù),并且在網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),可以丟失一些數(shù)據(jù),但是延遲不能太大?;谶@些特點(diǎn),流式多媒體通信、多播等應(yīng)用在傳輸層采用
4、的就是UDP協(xié)議。</p><p> 因?yàn)閁DP具有TCP所望塵莫及的速度優(yōu)勢。雖然TCP協(xié)議中植入了各種安全保障功能,但是在實(shí)際執(zhí)行的過程中會占用大量的系統(tǒng)開銷,無疑使速度受到嚴(yán)重的影響。反觀UDP由于排除了信息可靠傳遞機(jī)制,將安全和排序等功能移交給上層應(yīng)用來完成,極大降低了執(zhí)行時(shí)間,使速度得到了保證。</p><p> 二、課程設(shè)計(jì)的內(nèi)容和要求</p><p&g
5、t; 編寫程序,設(shè)計(jì)UDP服務(wù)器。因?yàn)榭紤]到實(shí)時(shí)性,所以選擇UDP為主要的網(wǎng)絡(luò)通信技術(shù)。</p><p> (1)程序能流暢地完成信息內(nèi)容的傳輸和接收。</p><p> (2)要能對多個(gè)客服端進(jìn)行管理。需要通過UDP模擬多個(gè)客服端連接驗(yàn)證的情況。</p><p> (3)操作系統(tǒng)、使用語言和編譯環(huán)境不限,但在作業(yè)中必須注明。</p><
6、p> 三、課程設(shè)計(jì)的相關(guān)技術(shù)</p><p><b> UDP協(xié)議技術(shù)</b></p><p> UDP是一個(gè)無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列
7、中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。</p><p><b> C++編程技術(shù)</b></p><p> TCP/IP協(xié)議技術(shù)</p><p> 在T C P / I P協(xié)議族中,有兩個(gè)互不相同的傳輸協(xié)議: T C P(傳輸控制協(xié)議)和U D
8、60;P(用戶數(shù)據(jù)報(bào)協(xié)議)。T C P為兩臺主機(jī)提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應(yīng)用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡(luò)層,確認(rèn)接收到的分組,設(shè)置發(fā)送最后確認(rèn)分組的超時(shí)時(shí)鐘等。由于運(yùn)輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略所有這些細(xì)節(jié)。而另一方面, U D P則為應(yīng)用層提供一種非常簡單的服務(wù)。它只是把稱作數(shù)據(jù)報(bào)的分組從一臺主機(jī)發(fā)送到另一臺主機(jī),但并不保證該數(shù)
9、據(jù)報(bào)能到達(dá)另一端。任何必需的可靠性必須由應(yīng)用層來提供。</p><p> TCP/IP協(xié)議與Winsock網(wǎng)絡(luò)編程接口</p><p> Winsock規(guī)范不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的Windows寫的網(wǎng)絡(luò)編程接口。Winsock可以訪問很多種網(wǎng)絡(luò)協(xié)議,可以把它當(dāng)作一種協(xié)議的封裝?,F(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),可以使用Winsock來調(diào)用協(xié)議的功能
10、</p><p> Winsock API的使用</p><p> 下面給出了使用Winsock進(jìn)行編程時(shí)涉及的主要函數(shù):</p><p> WSAStartup函數(shù)、WSACleanup函數(shù)、socket函數(shù)、closesocket函數(shù)、send函數(shù)、recv函數(shù)、bind函數(shù)、listen函數(shù)、accept函數(shù)、connect函數(shù)</p>&
11、lt;p><b> 四、課程設(shè)計(jì)過程</b></p><p><b> 4、1設(shè)計(jì)思路</b></p><p> 設(shè)計(jì)UDP服務(wù)器的過程如下所示。首先,創(chuàng)建又一個(gè)Socket并監(jiān)聽。然后</p><p> 啟動線程接收數(shù)據(jù)。用一個(gè)鏈表保存所有連上的客戶,并通知連接成功。這樣,客戶就有機(jī)會處理這一事件并作一些動
12、作。最后,當(dāng)客戶斷開時(shí),向服務(wù)器發(fā)送一個(gè)事件,服務(wù)器就可以做一些收尾工作。</p><p> 其中最關(guān)鍵的部分是收發(fā)部分和數(shù)據(jù)處理部分。</p><p> 4、2服務(wù)器的主要工作流程如圖1所示:</p><p> 客戶機(jī)一方的工作流程如下:</p><p> 打開通信信道(申請一個(gè)套接字),并連接到服務(wù)器在主機(jī)的保留端口,該端口對應(yīng)
13、服務(wù)器的UDP進(jìn)程。</p><p> 向服務(wù)器發(fā)出請求報(bào)文,等待接收應(yīng)答。</p><p> 從服務(wù)器方收到最終應(yīng)答結(jié)果,或在不再請求時(shí)關(guān)閉信道并終止客戶機(jī)進(jìn)程。</p><p> 服務(wù)器一方的工作流程如下:</p><p> 打開通信信道(申請一個(gè)套接字),通知本地主機(jī)在某一保留端口接收客戶機(jī)請求。</p><
14、p> 等待客戶機(jī)請求到達(dá)指定端口。</p><p> 接收到請求,啟動一個(gè)新進(jìn)程處理用戶請求,同時(shí)釋放舊進(jìn)程以響應(yīng)新的客戶請求,一旦服務(wù)完成,關(guān)閉新進(jìn)程與客戶的通信鏈路。</p><p> 繼續(xù)等待客戶機(jī)請求。</p><p> 如果不想響應(yīng)客戶機(jī)請求,關(guān)閉服務(wù)器進(jìn)程。</p><p> 4、3主要功能模塊如下:</p&
15、gt;<p><b> 發(fā)送</b></p><p> BOOL CUdpSock::SendBuffer(char *buff,DWORD dwBufsize,struct sockaddr FAR *lpTo)</p><p><b> {</b></p><p> m_lock.Lock();&
16、lt;/p><p> WSABUF wsabuf;</p><p> WSAOVERLAPPED over;</p><p> DWORD dwrecv;</p><p> DWORD dwFlags=0;</p><p> DWORD dwRet;</p><p> BOOL fPen
17、ding;</p><p><b> int nRet;</b></p><p> //建立 WSABUF和WSAOVERLAPPED 兩個(gè)結(jié)構(gòu)體</p><p> fPending=FALSE;</p><p> nRet=WSASendTo(m_Socket,</p><p><
18、b> &wsabuf,</b></p><p><b> 1,</b></p><p><b> &dwRecv,</b></p><p><b> IpTo,</b></p><p> sizeof(sockaddr),</p
19、><p><b> &over,</b></p><p><b> NULL);</b></p><p> if(nRet!=0)</p><p><b> {</b></p><p> //檢測是否是因?yàn)閭鬏斘赐瓿啥斐傻腻e誤</p
20、><p><b> else</b></p><p><b> { </b></p><p> //否則給出出錯信息</p><p><b> }</b></p><p><b> }</b></p><p
21、> //如果是I/O未完成</p><p> if(fPending)</p><p><b> {</b></p><p> //等待完成請求或結(jié)束事件</p><p> dwRet=WaitForSingleObject(over.hEvent,60000);</p><p>
22、 //判斷是否是接收方發(fā)出的信號</p><p> if(dwRet==WAIT_TIMEOUT)</p><p><b> {</b></p><p> CloseHandle(over.hEvent);</p><p> TRACE("WAIT_TIMEOUT發(fā)送失敗\n",NULL);
23、</p><p> return FALSE;</p><p><b> }</b></p><p> if(dwRet!=WAIT_OBJECT_0)</p><p><b> {</b></p><p> CloseHandle(over.hEvent);<
24、;/p><p> TRACE("發(fā)送失敗\n",NULL);</p><p> return FALSE;</p><p><b> }</b></p><p><b> //查看I/O信息</b></p><p> if(!WSAGetOverla
25、ppedResult(m_socket,</p><p><b> &over,</b></p><p><b> &dwRecv,</b></p><p><b> FALSE,</b></p><p> &dwFlags))</p>
26、;<p><b> {</b></p><p> //結(jié)束句柄會話,返回失敗信息</p><p><b> }</b></p><p><b> }</b></p><p> //結(jié)束句柄會話,返回成功信息</p><p><
27、;b> }</b></p><p><b> 接收</b></p><p> BOOL CUdpSock::RecvRequest(LPBYTE pBuf,DWORD dwBufSize,struct sockaddr FAR *lpFrom)</p><p><b> {</b></p&g
28、t;<p><b> //清空接收緩沖區(qū)</b></p><p> memset(pBuf,0,dwBufSize);</p><p> //建立 WSABUF和WSAOVERLAPPED 兩個(gè)結(jié)構(gòu)體</p><p> wsabuf.buf=(char *)pBuf;</p><p> wsabu
29、f.len=dwBufSize;</p><p> memset(&over,0,sizeof(WSAOVERLAPPED));</p><p> over.hEvent=m_hEventSock;</p><p> dwFlags=0;</p><p> fPending=FALSE;</p><p>
30、; int sizeAddr=sizeof(sockaddr_in);</p><p> nRet=WSARecvFrom(m_Socket,</p><p><b> &wsabuf,</b></p><p><b> 1,</b></p><p><b> &
31、dwRecv,</b></p><p><b> &dwFlags,</b></p><p><b> lpFrom,</b></p><p> &sizeAddr,</p><p><b> &over,</b></p>
32、<p><b> NULL);</b></p><p> if(nRet!=0)</p><p><b> {</b></p><p> //判斷傳輸是否正常完成</p><p><b> }</b></p><p><b&
33、gt; //如果完成</b></p><p> if(fPending)</p><p><b> {</b></p><p> //等待結(jié)束請求或退出事件</p><p><b> }</b></p><p><b> }</b>
34、;</p><p><b> 數(shù)據(jù)處理部分</b></p><p> BOOL CUdpSock::DelWithResData(struct sockaddr FAR *lpFrom)</p><p><b> {</b></p><p><b> //接收數(shù)據(jù)的處理</b
35、></p><p> return TRUE;</p><p><b> }</b></p><p><b> //數(shù)據(jù)的處理部分</b></p><p> void CUdpSock::OnRead()</p><p><b> {</b&g
36、t;</p><p> m_translate=0;</p><p> sockaddr_in addrfro;</p><p> memset(&addrfro,0,sizeof(sockaddr_in));</p><p> addrfro.sin._family=AF_INET;</p><p>
37、 //如果沒有接收請求就返回到讀信息函數(shù)</p><p> if(!RecvRequest((LPBYTE)m_wsaInBuffer.buf,</p><p> sizeof(m_byInBuffer),(sockaddr*)&addrfro))</p><p><b> {</b></p><p>
38、 TRACE("CClientOverlappedSock::OnRead\n");</p><p><b> return;</b></p><p><b> }</b></p><p> //如果m_translate不為0,則向m_SimpleIOBuffer緩沖區(qū)寫信息</p>
39、<p> if(m_translate)</p><p><b> {</b></p><p> m_SimpleIOBuffer.Write(m_wsaInBuffer.buf,m_translate);</p><p><b> try{</b></p><p><b
40、> //處理收到的信息</b></p><p> DelWithResData((sockaddr*)&addrfro);</p><p> }catch(...){</p><p> TRACE("Udp DelWithResData erro!\n");</p><p> memse
41、t(&m_PackHead,0,sizeof(PackHead));</p><p> m_bFillHead=FALSE;</p><p><b> }</b></p><p> m_SimpleIOBuffer.Notify();</p><p><b> }</b></p
42、><p><b> return;</b></p><p><b> }</b></p><p> 4、4程序?qū)崿F(xiàn)部分如下:</p><p><b> 客戶端程序如下:</b></p><p> #include <winsock2.h>
43、;</p><p> #include <stdio.h></p><p> #pragma comment(lib, "WS2_32") // 鏈接到WS2_32.lib </p><p> BOOL InitWinsock();</p><p> void main()</p><
44、;p><b> {</b></p><p> SOCKET socket1;</p><p> InitWinsock();</p><p> struct sockaddr_in server;</p><p> int len =sizeof(server);</p><p>
45、 server.sin_family=AF_INET;</p><p> server.sin_port=htons(1000); ///server的監(jiān)聽端口</p><p> server.sin_addr.s_addr=inet_addr("172.16.201.186"); ///server的地址 </p&
46、gt;<p> socket1=socket(AF_INET,SOCK_DGRAM,0);</p><p><b> while (1)</b></p><p><b> {</b></p><p> char buffer[1024]="\0";</p><p
47、> printf("input message\n");</p><p> scanf("%s",buffer);</p><p> if (strcmp(buffer,"bye")==0)</p><p><b> break;</b></p><p
48、> if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)</p><p><b> {</b></p><p> if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sock
49、addr*)&server,&len)!=SOCKET_ERROR)</p><p> printf("rece from server:%s\n",buffer);</p><p><b> }</b></p><p><b> }</b></p><p&
50、gt; closesocket(socket1);</p><p><b> }</b></p><p> BOOL InitWinsock()</p><p><b> {</b></p><p> int Error;</p><p> WORD Versio
51、nRequested;</p><p> WSADATA WsaData;</p><p> VersionRequested=MAKEWORD(2,2);</p><p> Error=WSAStartup(VersionRequested,&WsaData); //啟動WinSock2</p><p> if(Error!
52、=0)</p><p><b> {</b></p><p> return FALSE;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p
53、><p> if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)</p><p><b> {</b></p><p> WSACleanup();</p><p> return FALSE;</p><p><
54、;b> }</b></p><p><b> }</b></p><p> return TRUE;</p><p><b> }</b></p><p><b> 服務(wù)器端程序如下</b></p><p> #includ
55、e <winsock2.h></p><p> #include <stdio.h></p><p> #pragma comment(lib, "WS2_32") // 鏈接到WS2_32.lib </p><p> BOOL InitWinsock();</p><p> void ma
56、in()</p><p><b> {</b></p><p> SOCKET socket1;</p><p> InitWinsock();</p><p> struct sockaddr_in local;</p><p> struct sockaddr_in from;<
57、;/p><p> int fromlen =sizeof(from);</p><p> local.sin_family=AF_INET;</p><p> local.sin_port=htons(1000); ///監(jiān)聽端口</p><p> local.sin_addr.s_addr=INADDR_ANY;
58、 ///本機(jī)</p><p> socket1=socket(AF_INET,SOCK_DGRAM,0);</p><p> bind(socket1,(struct sockaddr*)&local,sizeof local);</p><p><b> while (1)</b></p><p&
59、gt;<b> {</b></p><p> char buffer[1024]="\0";</p><p> printf("waiting for message from others-------------\n");</p><p> if (recvfrom(socket1,buffe
60、r,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)</p><p><b> {</b></p><p> printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buff
61、er);</p><p> ////給cilent發(fā)信息</p><p> sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);</p><p><b> }</b></p><p> Sleep(500);<
62、/p><p><b> }</b></p><p> closesocket(socket1);</p><p><b> }</b></p><p> BOOL InitWinsock()</p><p><b> {</b></p>
63、<p> int Error;</p><p> WORD VersionRequested;</p><p> WSADATA WsaData;</p><p> VersionRequested=MAKEWORD(2,2);</p><p> Error=WSAStartup(VersionRequested,&a
64、mp;WsaData); //啟動WinSock2</p><p> if(Error!=0)</p><p><b> {</b></p><p> return FALSE;</p><p><b> }</b></p><p><b> else&l
65、t;/b></p><p><b> {</b></p><p> if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)</p><p><b> {</b></p><p> WSACleanup();<
66、;/p><p> return FALSE;</p><p><b> }</b></p><p><b> }</b></p><p> return TRUE;</p><p><b> }</b></p><p>
67、4、5 程序運(yùn)行結(jié)果截圖</p><p> 將IP地址為192.168.0.4的本機(jī)作為客戶端的結(jié)果如圖2和圖3</p><p> 圖2 本機(jī)作為客戶端的發(fā)送內(nèi)容</p><p> 圖3 本機(jī)作為客戶端時(shí)服務(wù)器接收情況</p><p> (2)將IP地址為1192.168.0.4的計(jì)算機(jī)作為客戶端的結(jié)果如圖4和圖5</p>
68、<p> 圖4 局域網(wǎng)內(nèi)其他主機(jī)作為客戶端的發(fā)送內(nèi)容</p><p> 圖5 局域網(wǎng)內(nèi)其他主機(jī)作為客戶端時(shí)服務(wù)器接收情況</p><p><b> 五、課程設(shè)計(jì)小結(jié)</b></p><p> 本次試驗(yàn)主要是探究源主機(jī)以恒定的速率發(fā)送數(shù)據(jù)以及客戶端接受數(shù)據(jù)。UDP是TCP/IP協(xié)議族為傳輸層設(shè)計(jì)的兩個(gè)協(xié)議之一,是一種無連接的
69、,不可靠的協(xié)議。由于UDP采取了無連接的方式,因此協(xié)議簡單,在一些特定的應(yīng)用中協(xié)議運(yùn)行效率高。UDP適合一些實(shí)時(shí)的應(yīng)用,如IP電話、視頻會議,它們要求源主機(jī)以恒定的速率發(fā)送數(shù)據(jù),并且在網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),可以丟失一些數(shù)據(jù),但是延遲不能太大?;谶@些特點(diǎn),流式多媒體通信、多播等應(yīng)用在傳輸層采用的就是UDP協(xié)議。 編寫一UDP服務(wù)器程序,流暢地完成視頻文件地傳輸,要能對多個(gè)客戶端進(jìn)行管理。需要通過UDP模擬多個(gè)客戶端連接驗(yàn)證的情況。</p
70、><p> UDP是TCP/IP協(xié)議族為傳輸層設(shè)計(jì)的兩個(gè)協(xié)議之一,它在進(jìn)程與進(jìn)程的通信過程中,提供了有限的差錯校驗(yàn)功能,是一種無連接的、不可靠的協(xié)議。分析后知道了UDP其實(shí)就是用來實(shí)現(xiàn)網(wǎng)絡(luò)中文件的傳輸和接收的協(xié)議。知道它的實(shí)質(zhì)后,接下來我們就開始思考具體的UDP實(shí)現(xiàn)的程序,該程序分為客戶端和服務(wù)器端兩部分,客戶端主要是執(zhí)行文件或消息的發(fā)送,服務(wù)器端則主要是接收這些內(nèi)容。整個(gè)程序最重要也是最有難度的部分就是如何把發(fā)送
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)報(bào)告---udp服務(wù)器設(shè)計(jì)
- 網(wǎng)絡(luò)程序設(shè)計(jì)linux服務(wù)器課程設(shè)計(jì)報(bào)告
- 發(fā)現(xiàn)服務(wù)器已開啟的tcp服務(wù)課程設(shè)計(jì)
- 網(wǎng)絡(luò)工程課程設(shè)計(jì)--web服務(wù)器配置
- 課程設(shè)計(jì)--linux中samba服務(wù)器配置方法
- 服務(wù)器應(yīng)用系統(tǒng)的實(shí)踐課程設(shè)計(jì)報(bào)告
- ftp服務(wù)器的構(gòu)建與維護(hù)課程設(shè)計(jì)
- linux課程設(shè)計(jì)-linux下ftp服務(wù)器的搭建
- 課程設(shè)計(jì)報(bào)告---聊天工具服務(wù)器端設(shè)計(jì)
- 【課程設(shè)計(jì)】linux環(huán)境下samba服務(wù)器配置與實(shí)現(xiàn)
- 通信應(yīng)用軟件課程設(shè)計(jì)---線程同步服務(wù)器編程
- linux課程設(shè)計(jì)報(bào)告-- 構(gòu)建綜合網(wǎng)絡(luò)服務(wù)器
- 基于UDP的傳輸流字幕服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--dns服務(wù)器搭建
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--dns服務(wù)器配置
- 網(wǎng)絡(luò)管理課程設(shè)計(jì)--證書服務(wù)器及流媒體應(yīng)用
- 網(wǎng)絡(luò)課程設(shè)計(jì)---linux服務(wù)器的配置---ubuntu操作系統(tǒng)
- 課程設(shè)計(jì)-中小型企業(yè)網(wǎng)服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)--簡單ftp服務(wù)器實(shí)現(xiàn)
- linux操作系統(tǒng)課程設(shè)計(jì)-- 構(gòu)建綜合網(wǎng)絡(luò)服務(wù)器
評論
0/150
提交評論