版權(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> 一、課程設(shè)計(jì)的目的和意義</p><p> UDP是TCP/IP協(xié)議族為傳輸層設(shè)計(jì)的兩個(gè)協(xié)議之一,它在進(jìn)程與進(jìn)程的通信過程中,提供了有限的差錯(cuò)校驗(yàn)功能,是一種無連接的,不可靠的協(xié)議。UDP在一個(gè)較低的水平
2、上完成進(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)用在傳輸層采用的就是UDP協(xié)議。</p><p> 因?yàn)閁
3、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> 編寫程序,設(shè)計(jì)UDP服務(wù)器。因?yàn)榭紤]到實(shí)時(shí)性,所以選擇UDP為
4、主要的網(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><p> 三、課程設(shè)計(jì)的相關(guān)技術(shù)</p><p
5、><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ì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。</p><
6、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 P(用戶數(shù)據(jù)報(bào)協(xié)議)。T C P為兩臺主機(jī)提
7、供高可靠性的數(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ù)據(jù)報(bào)能到達(dá)另一端。任何必需的可靠性必須由應(yīng)用層來提供。</p&g
8、t;<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é)議的封裝。現(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),可以使用Winsock來調(diào)用協(xié)議的功能</p><p> Winsock API的
9、使用</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><p><b> 四、課程設(shè)計(jì)過程</b&g
10、t;</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ī)會處理這一事件并作一些動作。最后,當(dāng)客戶斷開時(shí),向服務(wù)器發(fā)送一個(gè)事件,服務(wù)器就可以做一些收尾工
11、作。</p><p> 其中最關(guān)鍵的部分是收發(fā)部分和數(shù)據(jù)處理部分。</p><p> 4、2服務(wù)器的主要工作流程如圖1所示:</p><p> 客戶機(jī)一方的工作流程如下:</p><p> 打開通信信道(申請一個(gè)套接字),并連接到服務(wù)器在主機(jī)的保留端口,該端口對應(yīng)服務(wù)器的UDP進(jìn)程。</p><p> 向服
12、務(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><p> 等待客戶機(jī)請求到達(dá)指定端口。</p>&l
13、t;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><p><b> 發(fā)送</b&g
14、t;</p><p> BOOL CUdpSock::SendBuffer(char *buff,DWORD dwBufsize,struct sockaddr FAR *lpTo)</p><p><b> {</b></p><p> m_lock.Lock();</p><p> WSABUF wsabuf
15、;</p><p> WSAOVERLAPPED over;</p><p> DWORD dwrecv;</p><p> DWORD dwFlags=0;</p><p> DWORD dwRet;</p><p> BOOL fPending;</p><p><b>
16、 int nRet;</b></p><p> //建立 WSABUF和WSAOVERLAPPED 兩個(gè)結(jié)構(gòu)體</p><p> fPending=FALSE;</p><p> nRet=WSASendTo(m_Socket,</p><p><b> &wsabuf,</b></p
17、><p><b> 1,</b></p><p><b> &dwRecv,</b></p><p><b> IpTo,</b></p><p> sizeof(sockaddr),</p><p><b> &over
18、,</b></p><p><b> NULL);</b></p><p> if(nRet!=0)</p><p><b> {</b></p><p> //檢測是否是因?yàn)閭鬏斘赐瓿啥斐傻腻e(cuò)誤</p><p><b> else</
19、b></p><p><b> { </b></p><p> //否則給出出錯(cuò)信息</p><p><b> }</b></p><p><b> }</b></p><p> //如果是I/O未完成</p><p&
20、gt; if(fPending)</p><p><b> {</b></p><p> //等待完成請求或結(jié)束事件</p><p> dwRet=WaitForSingleObject(over.hEvent,60000);</p><p> //判斷是否是接收方發(fā)出的信號</p><p&
21、gt; if(dwRet==WAIT_TIMEOUT)</p><p><b> {</b></p><p> CloseHandle(over.hEvent);</p><p> TRACE("WAIT_TIMEOUT發(fā)送失敗\n",NULL);</p><p> return FALSE
22、;</p><p><b> }</b></p><p> if(dwRet!=WAIT_OBJECT_0)</p><p><b> {</b></p><p> CloseHandle(over.hEvent);</p><p> TRACE("發(fā)送失
23、敗\n",NULL);</p><p> return FALSE;</p><p><b> }</b></p><p><b> //查看I/O信息</b></p><p> if(!WSAGetOverlappedResult(m_socket,</p><
24、;p><b> &over,</b></p><p><b> &dwRecv,</b></p><p><b> FALSE,</b></p><p> &dwFlags))</p><p><b> {</b>&
25、lt;/p><p> //結(jié)束句柄會話,返回失敗信息</p><p><b> }</b></p><p><b> }</b></p><p> //結(jié)束句柄會話,返回成功信息</p><p><b> }</b></p><
26、p><b> 接收</b></p><p> BOOL CUdpSock::RecvRequest(LPBYTE pBuf,DWORD dwBufSize,struct sockaddr FAR *lpFrom)</p><p><b> {</b></p><p><b> //清空接收緩沖區(qū)&l
27、t;/b></p><p> memset(pBuf,0,dwBufSize);</p><p> //建立 WSABUF和WSAOVERLAPPED 兩個(gè)結(jié)構(gòu)體</p><p> wsabuf.buf=(char *)pBuf;</p><p> wsabuf.len=dwBufSize;</p><p&g
28、t; memset(&over,0,sizeof(WSAOVERLAPPED));</p><p> over.hEvent=m_hEventSock;</p><p> dwFlags=0;</p><p> fPending=FALSE;</p><p> int sizeAddr=sizeof(sockaddr_in)
29、;</p><p> nRet=WSARecvFrom(m_Socket,</p><p><b> &wsabuf,</b></p><p><b> 1,</b></p><p><b> &dwRecv,</b></p><p&
30、gt;<b> &dwFlags,</b></p><p><b> lpFrom,</b></p><p> &sizeAddr,</p><p><b> &over,</b></p><p><b> NULL);</b&
31、gt;</p><p> if(nRet!=0)</p><p><b> {</b></p><p> //判斷傳輸是否正常完成</p><p><b> }</b></p><p><b> //如果完成</b></p>&l
32、t;p> if(fPending)</p><p><b> {</b></p><p> //等待結(jié)束請求或退出事件</p><p><b> }</b></p><p><b> }</b></p><p><b> 數(shù)據(jù)
33、處理部分</b></p><p> BOOL CUdpSock::DelWithResData(struct sockaddr FAR *lpFrom)</p><p><b> {</b></p><p><b> //接收數(shù)據(jù)的處理</b></p><p> return T
34、RUE;</p><p><b> }</b></p><p><b> //數(shù)據(jù)的處理部分</b></p><p> void CUdpSock::OnRead()</p><p><b> {</b></p><p> m_translat
35、e=0;</p><p> sockaddr_in addrfro;</p><p> memset(&addrfro,0,sizeof(sockaddr_in));</p><p> addrfro.sin._family=AF_INET;</p><p> //如果沒有接收請求就返回到讀信息函數(shù)</p>&l
36、t;p> if(!RecvRequest((LPBYTE)m_wsaInBuffer.buf,</p><p> sizeof(m_byInBuffer),(sockaddr*)&addrfro))</p><p><b> {</b></p><p> TRACE("CClientOverlappedSock:
37、:OnRead\n");</p><p><b> return;</b></p><p><b> }</b></p><p> //如果m_translate不為0,則向m_SimpleIOBuffer緩沖區(qū)寫信息</p><p> if(m_translate)</p&
38、gt;<p><b> {</b></p><p> m_SimpleIOBuffer.Write(m_wsaInBuffer.buf,m_translate);</p><p><b> try{</b></p><p><b> //處理收到的信息</b></p>
39、<p> DelWithResData((sockaddr*)&addrfro);</p><p> }catch(...){</p><p> TRACE("Udp DelWithResData erro!\n");</p><p> memset(&m_PackHead,0,sizeof(PackHead
40、));</p><p> m_bFillHead=FALSE;</p><p><b> }</b></p><p> m_SimpleIOBuffer.Notify();</p><p><b> }</b></p><p><b> return;&l
41、t;/b></p><p><b> }</b></p><p> 4、4程序?qū)崿F(xiàn)部分如下:</p><p><b> 客戶端程序如下:</b></p><p> #include <winsock2.h></p><p> #include &l
42、t;stdio.h></p><p> #pragma comment(lib, "WS2_32") // 鏈接到WS2_32.lib </p><p> BOOL InitWinsock();</p><p> void main()</p><p><b> {</b></p&
43、gt;<p> SOCKET socket1;</p><p> InitWinsock();</p><p> struct sockaddr_in server;</p><p> int len =sizeof(server);</p><p> server.sin_family=AF_INET;</p&
44、gt;<p> server.sin_port=htons(1000); ///server的監(jiān)聽端口</p><p> server.sin_addr.s_addr=inet_addr("172.16.201.186"); ///server的地址 </p><p> socket1=socket(AF_I
45、NET,SOCK_DGRAM,0);</p><p><b> while (1)</b></p><p><b> {</b></p><p> char buffer[1024]="\0";</p><p> printf("input message\n&
46、quot;);</p><p> scanf("%s",buffer);</p><p> if (strcmp(buffer,"bye")==0)</p><p><b> break;</b></p><p> if (sendto(socket1,buffer,siz
47、eof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)</p><p><b> {</b></p><p> if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len)!=SOCKET
48、_ERROR)</p><p> printf("rece from server:%s\n",buffer);</p><p><b> }</b></p><p><b> }</b></p><p> closesocket(socket1);</p>
49、;<p><b> }</b></p><p> BOOL InitWinsock()</p><p><b> {</b></p><p> int Error;</p><p> WORD VersionRequested;</p><p> W
50、SADATA WsaData;</p><p> VersionRequested=MAKEWORD(2,2);</p><p> Error=WSAStartup(VersionRequested,&WsaData); //啟動WinSock2</p><p> if(Error!=0)</p><p><b>
51、{</b></p><p> return FALSE;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(LOBYTE(WsaData.
52、wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)</p><p><b> {</b></p><p> WSACleanup();</p><p> return FALSE;</p><p><b> }</b></p><
53、p><b> }</b></p><p> return TRUE;</p><p><b> }</b></p><p><b> 服務(wù)器端程序如下</b></p><p> #include <winsock2.h></p><
54、;p> #include <stdio.h></p><p> #pragma comment(lib, "WS2_32") // 鏈接到WS2_32.lib </p><p> BOOL InitWinsock();</p><p> void main()</p><p><b>
55、 {</b></p><p> SOCKET socket1;</p><p> InitWinsock();</p><p> struct sockaddr_in local;</p><p> struct sockaddr_in from;</p><p> int fromlen =si
56、zeof(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; ///本機(jī)</p><p>
57、socket1=socket(AF_INET,SOCK_DGRAM,0);</p><p> bind(socket1,(struct sockaddr*)&local,sizeof local);</p><p><b> while (1)</b></p><p><b> {</b></p>
58、<p> char buffer[1024]="\0";</p><p> printf("waiting for message from others-------------\n");</p><p> if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*
59、)&from,&fromlen)!=SOCKET_ERROR)</p><p><b> {</b></p><p> printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);</p><p> ////給cil
60、ent發(fā)信息</p><p> sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);</p><p><b> }</b></p><p> Sleep(500);</p><p><b> }</b
61、></p><p> closesocket(socket1);</p><p><b> }</b></p><p> BOOL InitWinsock()</p><p><b> {</b></p><p> int Error;</p>
62、<p> WORD VersionRequested;</p><p> WSADATA WsaData;</p><p> VersionRequested=MAKEWORD(2,2);</p><p> Error=WSAStartup(VersionRequested,&WsaData); //啟動WinSock2</p>
63、<p> if(Error!=0)</p><p><b> {</b></p><p> return FALSE;</p><p><b> }</b></p><p><b> else</b></p><p><b&
64、gt; {</b></p><p> if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)</p><p><b> {</b></p><p> WSACleanup();</p><p> return FALSE;&l
65、t;/p><p><b> }</b></p><p><b> }</b></p><p> return TRUE;</p><p><b> }</b></p><p> 4、5 程序運(yùn)行結(jié)果截圖</p><p>
66、將IP地址為192.168.0.5的本機(jī)作為客戶端的結(jié)果如圖2和圖3</p><p> 圖2 本機(jī)作為客戶端的發(fā)送內(nèi)容</p><p> 圖3 本機(jī)作為客戶端時(shí)服務(wù)器接收情況</p><p> (2)將IP地址為172.168.0.11的計(jì)算機(jī)作為客戶端的結(jié)果如圖4和圖5</p><p> 圖4 局域網(wǎng)內(nèi)其他主機(jī)作為客戶端的發(fā)送內(nèi)容&
67、lt;/p><p> 圖5 局域網(wǎng)內(nèi)其他主機(jī)作為客戶端時(shí)服務(wù)器接收情況</p><p><b> 五、課程設(shè)計(jì)小結(jié)</b></p><p> 本次課程設(shè)計(jì)為時(shí)一周,我們這組的課題是UDP服務(wù)器設(shè)計(jì),其主要研究內(nèi)容在于實(shí)現(xiàn)文件的傳輸及接收。我們首先是了解UDP的定義,即確定UDP究竟是個(gè)什么協(xié)議,它有些什么性質(zhì)和特征,它應(yīng)用于那些方面。經(jīng)過了解
68、知道了UDP是TCP/IP協(xié)議族為傳輸層設(shè)計(jì)的兩個(gè)協(xié)議之一,它在進(jìn)程與進(jìn)程的通信過程中,提供了有限的差錯(cuò)校驗(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ā)送和接收兩部分聯(lián)系在一起,經(jīng)過
69、老師的悉心引導(dǎo),我們終于攻克了這個(gè)難題,這樣我們就把程序的功能充分的實(shí)現(xiàn)出來了。而且這次的課程設(shè)計(jì)過程中,我們接觸到了全新的編程方法-Winsock,使我們學(xué)到了新知識。具體的,通過這次的課程設(shè)計(jì),我們掌握了如下的一些新知識:</p><p> ?。?)Winsock庫的加載和卸載等。</p><p> ?。?)UDP套接字的創(chuàng)建、綁定和關(guān)閉。</p><p>
70、(3)各張?zhí)捉幼诌x項(xiàng)的設(shè)定,如廣播類型、重用類型、數(shù)據(jù)報(bào)的TTL值等。</p><p> ?。?)UDP數(shù)據(jù)報(bào)的發(fā)送和接收方法。</p><p> ?。?)Winsock中加入組播組的方法。</p><p> 通過一個(gè)星期的努力,應(yīng)該基本上完成了課題任務(wù),成功地實(shí)現(xiàn)課題目標(biāo)。</p><p><b> 參考書目</b>
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- udp服務(wù)器設(shè)計(jì)---課程設(shè)計(jì)
- 網(wǎng)絡(luò)程序設(shè)計(jì)linux服務(wù)器課程設(shè)計(jì)報(bào)告
- 服務(wù)器應(yīng)用系統(tǒng)的實(shí)踐課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告---聊天工具服務(wù)器端設(shè)計(jì)
- linux課程設(shè)計(jì)報(bào)告-- 構(gòu)建綜合網(wǎng)絡(luò)服務(wù)器
- 發(fā)現(xiàn)服務(wù)器已開啟的tcp服務(wù)課程設(shè)計(jì)
- 網(wǎng)絡(luò)工程課程設(shè)計(jì)--web服務(wù)器配置
- 課程設(shè)計(jì)--linux中samba服務(wù)器配置方法
- ftp服務(wù)器的構(gòu)建與維護(hù)課程設(shè)計(jì)
- linux課程設(shè)計(jì)-linux下ftp服務(wù)器的搭建
- 2011180012linux操作系統(tǒng)課程設(shè)計(jì)報(bào)告web服務(wù)器的實(shí)現(xiàn)
- 2011180012linux操作系統(tǒng)課程設(shè)計(jì)報(bào)告web服務(wù)器的實(shí)現(xiàn)
- 【課程設(shè)計(jì)】linux環(huán)境下samba服務(wù)器配置與實(shí)現(xiàn)
- 通信應(yīng)用軟件課程設(shè)計(jì)---線程同步服務(wù)器編程
- 基于UDP的傳輸流字幕服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 流媒體服務(wù)器的配置與實(shí)現(xiàn)(數(shù)據(jù)通信課程設(shè)計(jì)報(bào)告)
- 計(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)
評論
0/150
提交評論