版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> TCP/IP課程設(shè)計(jì)</p><p> 設(shè)計(jì)題目:基于套接字的客戶機(jī)/服務(wù)器程序設(shè)計(jì)</p><p><b> 班 級(jí): </b></p><p><b> 學(xué) 號(hào):</b></p><p><b> 姓 名: </b><
2、/p><p><b> 指導(dǎo)老師: </b></p><p><b> 年 月 日</b></p><p> 基于套接字的客戶機(jī)/服務(wù)器程序設(shè)計(jì)</p><p><b> 一.設(shè)計(jì)目的:</b></p><p> 理解客戶機(jī)/服務(wù)器模型的工作
3、原理;</p><p><b> 掌握套接字的概念;</b></p><p> 掌握基于套接字的面向連接和無連接客戶機(jī)/服務(wù)器程序的設(shè)計(jì)原理和相關(guān)的WinSock API函數(shù);</p><p> 掌握基于TCP和UDP的程序設(shè)計(jì)方法。</p><p><b> 二.設(shè)計(jì)內(nèi)容:</b><
4、/p><p> 基于TCP的應(yīng)用編程:編寫一個(gè)Client/Server程序?qū)?,服?wù)器程序負(fù)責(zé)接收客戶機(jī)進(jìn)程的連接請(qǐng)求,并在服務(wù)器進(jìn)程與客戶機(jī)進(jìn)程之間建立通信連接,然后接收客戶機(jī)進(jìn)程的傳送數(shù)據(jù)并將其顯示在服務(wù)器端,同時(shí)將歡迎信息發(fā)送給客戶機(jī)進(jìn)程,最后關(guān)閉該客戶機(jī)進(jìn)程的連接;客戶機(jī)進(jìn)程首先提出對(duì)指定服務(wù)器的連接請(qǐng)求,建立連接后向服務(wù)器進(jìn)程發(fā)送已經(jīng)建立連接的數(shù)據(jù)信息,同時(shí)接收服務(wù)器進(jìn)程發(fā)送過來的數(shù)據(jù)并顯示在客戶端。采用
5、WinSock API實(shí)現(xiàn)代碼。</p><p> 基于UDP的應(yīng)用編程:實(shí)現(xiàn)一個(gè)基于UDP的客戶機(jī)/服務(wù)器程序,通過設(shè)定不同的命令行參數(shù)來確定應(yīng)用進(jìn)程的不同角色,即充當(dāng)客戶機(jī)進(jìn)程還是服務(wù)器進(jìn)程。當(dāng)兩個(gè)進(jìn)程運(yùn)行后,彼此之間可以輪流發(fā)送消息,對(duì)方接收后顯示出來。</p><p><b> 三.原理分析:</b></p><p> ?。ㄒ唬┨捉?/p>
6、字的概念:</p><p> 套接字(Socket) 1. Socket的出現(xiàn),使得程序員可以很方便的訪問TCP/IP,從而開發(fā)各種網(wǎng)絡(luò)應(yīng)用的程序 2. 套接字存在于通信區(qū)域中,通信區(qū)域也叫地址族,他是一個(gè)抽象的概念,主要用于通過套接字通信的進(jìn)程的共有特性綜合在一起。套接字通常只與同一個(gè)區(qū)域的套接字交換數(shù)據(jù)。 套接字的類型 1. 流式套接字(SOCK_STREAM) 提供面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)
7、,數(shù)據(jù)無差錯(cuò),無重復(fù)的發(fā)送,且按發(fā)送的順序接收,基于TCP協(xié)議 ;2. 數(shù)據(jù)保式套接字(SOCK_DGRAM) 提供無連接的服務(wù),數(shù)據(jù)包以獨(dú)立包形式發(fā)送,不提供無錯(cuò)誤的保證,數(shù)據(jù)可能丟失或重復(fù),且接收順序混亂,基于UDP協(xié)議。</p><p> (二)WinSock應(yīng)用程序接口:</p><p> WinSock是一個(gè)基于套接字模型的API(應(yīng)用程序接口),在Microsoft W
8、indows操作系統(tǒng)類中使用。它在Berkekley接口函數(shù)的基礎(chǔ)上,還增加了基于消息驅(qū)動(dòng)機(jī)制的Windows擴(kuò)展函數(shù)。其中WinSock 1.1只支持TCP/IP網(wǎng)絡(luò),WinSock2.0則增加了對(duì)更多協(xié)議的支持。WinSock包括以下3類的函數(shù):</p><p> 1.WinSock API包含的Berkeley Socket函數(shù)。這類函數(shù)分兩部分,其一是用于網(wǎng)絡(luò)I/P的函數(shù);其二是不涉及網(wǎng)絡(luò)I/O,在本地
9、端完成的函數(shù)。</p><p> 2.檢索有關(guān)域名,通信服務(wù)和協(xié)議等Internet信息的數(shù)據(jù)庫函數(shù)。</p><p> 3.Berkekley Socket API的Windows轉(zhuǎn)用的擴(kuò)展函數(shù)。</p><p><b> (三)工作模型</b></p><p> 網(wǎng)絡(luò)應(yīng)用程序一般是以客戶機(jī)/服務(wù)器的模型的方式
10、工作的。而因特網(wǎng)便是客戶機(jī)/服務(wù)器模型的一個(gè)典型應(yīng)用。在這種工作方式中,一個(gè)服務(wù)器程序通常事先啟動(dòng),并在一個(gè)熟知端口偵聽對(duì)服務(wù)器的請(qǐng)求,如FTP服務(wù)器,Web服務(wù)器等。當(dāng)客戶機(jī)應(yīng)用程序需要某種服務(wù)時(shí),需向提供這種服務(wù)的服務(wù)器發(fā)出請(qǐng)求,服務(wù)器在接收到請(qǐng)求后,向客戶機(jī)發(fā)出相應(yīng)請(qǐng)求信息。這樣客戶機(jī)應(yīng)用程序和服務(wù)器程序之間便建立了通信連接,此后可以進(jìn)行數(shù)據(jù)通信。通信任務(wù)完成后需要關(guān)閉它們之間的通信連接?;赥CP(面向連接)和基于UDP(面向非
11、連接)應(yīng)用程序的工作流程如下所示:</p><p><b> 四.總體設(shè)計(jì):</b></p><p> (一)基于TCP(面向連接)的Socket編程:服務(wù)器端順序: 1. 加載套接字庫 2. 創(chuàng)建套接字(socket) 3. 將套接字綁定到一個(gè)本地地址和端口上(bind) 4. 將套接字設(shè)為監(jiān)聽模式,準(zhǔn)備接收客戶請(qǐng)求(listen) 5. 等待客戶請(qǐng)
12、求的到來;當(dāng)請(qǐng)求帶來后,接受連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此次連接的套接字(accept) 6. 用返回的套接字和客戶端進(jìn)行通信(send/recv) 7. 返回,等待另一個(gè)客戶請(qǐng)求 8. 關(guān)閉套接字(closesocket) 客戶端程序: 1. 加載套接字庫 2. 創(chuàng)建套接字(socket) 3. 向服務(wù)器發(fā)送連接請(qǐng)求(connect) 4. 和服務(wù)器端進(jìn)行通信(send/receive) 5. 關(guān)閉套接字(close
13、socket) (二)基于UDP(面向無連接)的socket編程 :服務(wù)器端(接收端)程序: 1. 加載套接字庫 2. 創(chuàng)建套接字(socket) 3. 將套接字綁定到一個(gè)本地地址和端口上(bind) 4. 等待接收數(shù)據(jù)(recvfrom) 5. 關(guān)閉套接字(closesocket)</p><p><b> 五.詳細(xì)設(shè)計(jì):</b></p><p>
14、 (一).基于TCP的服務(wù)器/客戶機(jī)程序:</p><p> 服務(wù)器端TCPserver.cpp:</p><p> #include<winsock2.h></p><p> #include<iostream></p><p> using namespace std;</p><p&g
15、t; #include <string.h></p><p> void main() </p><p><b> { </b></p><p> //加載套接字(winsock)庫</p><p> WORD wVersionRequested; </p><p> WS
16、ADATA wsaData; </p><p><b> int err; </b></p><p> wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2</p><p> err = WSAStartup( wVersionRequested, &wsaData ); </p&g
17、t;<p> if ( err != 0 ) { </p><p><b> return; </b></p><p><b> } </b></p><p> if ( LOBYTE( wsaData.wVersion ) != 2 || </p><p> HIBYTE(
18、 wsaData.wVersion ) != 2 ) { </p><p> WSACleanup( ); </p><p><b> return; </b></p><p><b> } </b></p><p><b> //創(chuàng)建套接字 </b></p>
19、;<p> SOCKET sockServer=socket(AF_INET,SOCK_STREAM,0); //SOCK_STREAM參數(shù)設(shè)置為TCP連接 </p><p> SOCKADDR_IN addrServer; //設(shè)置服務(wù)器端套接字的相關(guān)屬性 </p><p> addrServer.sin_addr.S_un.S_addr=htonl(INADDR_A
20、NY); //設(shè)置IP </p><p> addrServer.sin_family=AF_INET; </p><p> addrServer.sin_port=htons(5000); //設(shè)置端口號(hào) </p><p> //將套接字綁定到本地地址和指定端口上 </p><p> bind(sockServer,(SOCKADD
21、R*)&addrServer,sizeof(SOCKADDR)); </p><p> //將套接字設(shè)置為監(jiān)聽模式,并將最大請(qǐng)求連接數(shù)設(shè)置成5,超過此數(shù)的請(qǐng)求全部作廢 </p><p> listen(sockServer,5); </p><p> SOCKADDR_IN addrClient; //用來接收客戶端的設(shè)置,包括IP和端口 </p
22、><p> int len=sizeof(SOCKADDR); </p><p> while(1) //不斷監(jiān)聽 </p><p><b> { </b></p><p> //得到創(chuàng)建連接后的一個(gè)新的套接字,用來和客戶端進(jìn)行溝通,原套接字繼續(xù)監(jiān)聽客戶的連接請(qǐng)求 </p><p> SOC
23、KET sockConn=accept(sockServer,(SOCKADDR*)&addrClient, &len); </p><p> if(sockConn!=INVALID_SOCKET) //創(chuàng)建成功 </p><p><b> { </b></p><p> char sendInfo[100]; <
24、/p><p> //inet_ntoa將結(jié)構(gòu)轉(zhuǎn)換為十進(jìn)制的IP地址字符串 </p><p> sprintf(sendInfo,"welcome %s to this test!",inet_ntoa(addrClient.sin_addr)); </p><p> //成功建立連接后向客戶端發(fā)送數(shù)據(jù),結(jié)果將顯示在客戶端上 </p>
25、<p> send(sockConn,sendInfo,strlen(sendInfo)+1,0); </p><p> //從客戶端接收數(shù)據(jù),結(jié)果顯示在服務(wù)器上 </p><p> char recvInfo[100]; </p><p> recv(sockConn,recvInfo,100,0); </p><p>
26、; printf("%s\n",recvInfo); </p><p> //將本次建立連接中得到套接字關(guān)閉 </p><p> closesocket(sockConn); </p><p><b> } </b></p><p><b> else </b><
27、/p><p><b> { </b></p><p> int errCode=WSAGetLastError(); </p><p> printf("the errcode is:%d\n",errCode); </p><p><b> } </b></p>
28、<p><b> } </b></p><p> //如果本程序不是死循環(huán),那么在此處還應(yīng)添加以下代碼: </p><p> closesocket(sockServer); //對(duì)一直處于監(jiān)聽狀態(tài)的套接字進(jìn)行關(guān)閉 </p><p> WSACleanup(); //終止對(duì)winsocket庫的使用 </p>
29、<p><b> }</b></p><p> 客戶端TCPclient.cpp:</p><p> #include<winsock2.h></p><p> #include<iostream></p><p> using namespace std;</p>
30、;<p> #include <string.h></p><p> void main() </p><p><b> { </b></p><p><b> //加載套接字庫 </b></p><p> WORD wVersionRequested; <
31、/p><p> WSADATA wsaData; </p><p><b> int err; </b></p><p> wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2 </p><p> err = WSAStartup( wVersionRequested, &a
32、mp;wsaData ); </p><p> if ( err != 0 ) { </p><p><b> return; </b></p><p><b> } </b></p><p> if ( LOBYTE( wsaData.wVersion ) != 2 || </p&g
33、t;<p> HIBYTE( wsaData.wVersion ) != 2 ) { </p><p> WSACleanup( ); </p><p><b> return; </b></p><p><b> } </b></p><p> SOCKET sockCli
34、ent=socket(AF_INET,SOCK_STREAM,0); //SOCK_STREAM參數(shù)設(shè)置為TCP連接 </p><p> SOCKADDR_IN addrServer; //服務(wù)器地址結(jié)構(gòu) </p><p> addrServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //服務(wù)器地址 </p&
35、gt;<p> addrServer.sin_port=htons(5000); //服務(wù)器端口號(hào) </p><p> addrServer.sin_family=AF_INET; </p><p> //與服務(wù)器端建立連接,進(jìn)行通信 </p><p> int connReult=connect(sockClient,(SOCKADDR*)&
36、amp;addrServer,sizeof(SOCKADDR)); </p><p> if(connReult!=WSAEADDRNOTAVAIL) //訪問成功 </p><p><b> { </b></p><p> //成功建立連接后向服務(wù)器端發(fā)送數(shù)據(jù),結(jié)果將顯示在服務(wù)器端上 </p><p> sen
37、d(sockClient,"this is lisi!",strlen("this is zhangsan!")+1,0); </p><p> //接收來自服務(wù)器端發(fā)送來的信息 </p><p> char recvInfo[100]; </p><p> recv(sockClient,recvInfo,100,0)
38、; </p><p> printf("%s\n",recvInfo); </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> in
39、t errCode=WSAGetLastError(); </p><p> printf("the errcode is:%d\n",errCode); </p><p><b> } </b></p><p> closesocket(sockClient); </p><p> WSAC
40、leanup(); </p><p><b> }</b></p><p> (二)基于UDP的服務(wù)器/客戶機(jī)程序:</p><p> 服務(wù)端UDPserver.cpp:</p><p> #include <winsock2.h></p><p> #include <
41、;iostream></p><p> using namespace std;</p><p> void main() </p><p><b> { </b></p><p> //加載套接字(winsock)庫,加載這段代碼拷貝于MSDN中WSAStartup的介紹 </p><
42、p> WORD wVersionRequested; </p><p> WSADATA wsaData; </p><p><b> int err; </b></p><p> wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2 </p><p> err
43、= WSAStartup( wVersionRequested, &wsaData ); </p><p> if ( err != 0 ) { </p><p><b> return; </b></p><p><b> } </b></p><p> if ( LOBYTE(
44、wsaData.wVersion ) != 2 || </p><p> HIBYTE( wsaData.wVersion ) != 2 ) { </p><p> WSACleanup( ); </p><p><b> return; </b></p><p><b> } </b>&l
45、t;/p><p><b> //創(chuàng)建套接字 </b></p><p> //注意第二個(gè)參數(shù)和TCP設(shè)置不同 </p><p> SOCKET sockServer=socket(AF_INET,SOCK_DGRAM,0); </p><p> SOCKADDR_IN addrServer; //設(shè)置服務(wù)器端套接字的地
46、址結(jié)構(gòu)的相關(guān)屬性 </p><p> addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //設(shè)置IP </p><p> addrServer.sin_family=AF_INET; </p><p> addrServer.sin_port=htons(6000); //設(shè)置端口號(hào) </p>
47、<p> //將套接字和服務(wù)器地址結(jié)構(gòu)綁定 </p><p> bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR)); </p><p> SOCKADDR_IN addrClient; </p><p> int len=sizeof(SOCKADDR); </p>
48、<p> char recvBuf[100]; </p><p> char tempBuf[100]; </p><p> char sendBuf[100]; </p><p><b> while(1) </b></p><p><b> { </b></p>
49、<p> //從客戶端接收數(shù)據(jù) </p><p> int result=recvfrom(sockServer,recvBuf,100,0,(SOCKADDR *)&addrClient,&len); </p><p> if(result==SOCKET_ERROR) </p><p><b> { </b&
50、gt;</p><p> int errCode=WSAGetLastError(); </p><p> printf("error:%d",errCode); </p><p> break; //退出循環(huán) </p><p><b> } </b></p><p>
51、<b> else </b></p><p><b> { </b></p><p> if(recvBuf[0]=='q') //對(duì)方請(qǐng)求退出 </p><p><b> { </b></p><p> //同樣將退出請(qǐng)求發(fā)送回去 </p>
52、;<p> sendto(sockServer,"q",strlen("q")+1,0,(SOCKADDR*)& addrClient,sizeof(SOCKADDR)); </p><p> printf("the chat end!"); </p><p><b> break; <
53、/b></p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> //將對(duì)方發(fā)送過來的信息前段加上IP地址進(jìn)行輸出 </p><p> sprintf(
54、tempBuf,"%s said:%s",inet_ntoa(addrClient.sin_addr),recvBuf); </p><p> printf("%s\n",tempBuf); </p><p> //將用戶的鍵盤輸入發(fā)送到對(duì)方 </p><p> printf("pleas input the
55、message:\n"); </p><p> gets(sendBuf); //得到鍵盤輸入內(nèi)容 </p><p> sendto(sockServer,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)& addrClient,sizeof(SOCKADDR)); </p><p><b> } &l
56、t;/b></p><p><b> } </b></p><p><b> } </b></p><p> closesocket(sockServer); </p><p> WSACleanup(); </p><p><b> }</b
57、></p><p> 客戶端UDPclient.cpp:</p><p> #include <winsock2.h></p><p> #include <iostream></p><p> using namespace std;</p><p> void main()
58、</p><p><b> { </b></p><p> //加載套接字(winsock)庫,加載這段代碼拷貝于MSDN中WSAStartup的介紹 </p><p> WORD wVersionRequested; </p><p> WSADATA wsaData; </p><p>
59、;<b> int err; </b></p><p> wVersionRequested = MAKEWORD( 2, 2 ); //版本號(hào)為2.2 </p><p> err = WSAStartup( wVersionRequested, &wsaData ); </p><p> if ( err != 0 ) { &
60、lt;/p><p><b> return; </b></p><p><b> } </b></p><p> if ( LOBYTE( wsaData.wVersion ) != 2 || </p><p> HIBYTE( wsaData.wVersion ) != 2 ) { </
61、p><p> WSACleanup( ); </p><p><b> return; </b></p><p><b> } </b></p><p><b> //創(chuàng)建套接字 </b></p><p> SOCKET sockClient=so
62、cket(AF_INET,SOCK_DGRAM,0); //注意第二個(gè)參數(shù)和TCP設(shè)置不同 </p><p> SOCKADDR_IN addrServer; //服務(wù)器地址結(jié)構(gòu) </p><p> addrServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //服務(wù)器地址 </p><p>
63、; addrServer.sin_family=AF_INET; </p><p> addrServer.sin_port=htons(6000); //服務(wù)器端口號(hào) </p><p> char tempBuf[100]; </p><p> char recvBuf[100]; </p><p> char sendBuf[1
64、00]; </p><p> int len=sizeof(SOCKADDR); </p><p><b> while(1) </b></p><p><b> { </b></p><p> printf("plese input the message:\n");
65、</p><p> gets(sendBuf); //得到用戶的鍵盤輸入 </p><p> sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrServer,sizeof(SOCKADDR)); </p><p> int result=recvfrom(sockClient,r
66、ecvBuf,100,0,(SOCKADDR *)&addrServer,&len); </p><p> if(result==SOCKET_ERROR) </p><p><b> { </b></p><p> int errCode=WSAGetLastError(); </p><p>
67、 printf("error:%d",errCode); </p><p> break; //退出循環(huán) </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p>
68、;<p> if(recvBuf[0]=='q') //對(duì)方請(qǐng)求退出 </p><p><b> { </b></p><p> //同樣將退出請(qǐng)求發(fā)送回去 </p><p> sendto(sockClient,"q",strlen("q")+1,0,(SOCKAD
69、DR*)& addrServer,sizeof(SOCKADDR)); </p><p> printf("the chat end!"); </p><p><b> break; </b></p><p><b> } </b></p><p><b>
70、; else </b></p><p><b> { </b></p><p> //將對(duì)方發(fā)送過來的信息前段加上IP地址進(jìn)行輸出 </p><p> sprintf(tempBuf,"%s said:%s",inet_ntoa(addrServer.sin_addr),recvBuf); </p&
71、gt;<p> printf("%s\n",tempBuf); </p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> closesocket(soc
72、kClient); </p><p> WSACleanup(); </p><p><b> }</b></p><p><b> 六.運(yùn)行結(jié)果:</b></p><p> (一)基于TCP C/S應(yīng)用程序:</p><p> 程序運(yùn)行結(jié)果如下圖所示,在啟動(dòng)服務(wù)端
73、后啟動(dòng)客戶端時(shí),客戶端自動(dòng)按照運(yùn)行步驟發(fā)送消息到服務(wù)端上,服務(wù)端在偵聽過程中探測到客戶端的連接并返回歡迎消息。</p><p><b> 服務(wù)端:</b></p><p><b> 客戶端:</b></p><p> (二)基于UDP C/S應(yīng)用程序:</p><p> 程序運(yù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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--基于cs結(jié)構(gòu)的套接字程序設(shè)計(jì)(tcp)
- tcp_ip課程設(shè)計(jì)
- 計(jì)算機(jī)系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)--利用vb6 winsock空間創(chuàng)建tcp—ip客戶機(jī)—服務(wù)器程序
- 網(wǎng)絡(luò)程序設(shè)計(jì)linux服務(wù)器課程設(shè)計(jì)報(bào)告
- wincc客戶機(jī)服務(wù)器結(jié)構(gòu)
- 嵌入式課程設(shè)計(jì)--linux tcp服務(wù)器_客戶端通信程序
- 基于Agent的客戶機(jī)-服務(wù)器模型的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 發(fā)現(xiàn)服務(wù)器已開啟的tcp服務(wù)課程設(shè)計(jì)
- 基于三層客戶機(jī)-服務(wù)器結(jié)構(gòu)的應(yīng)用系統(tǒng)設(shè)計(jì).pdf
- wincc服務(wù)器與客戶機(jī)的配置與下載
- 瘦(胖)客戶機(jī)-終端服務(wù)器模式的設(shè)計(jì)及應(yīng)用.pdf
- 用socket套接字實(shí)現(xiàn)daytime協(xié)議的服務(wù)器和客戶端程序
- 基于WEB方式的客戶機(jī)與服務(wù)器交互的實(shí)現(xiàn).pdf
- 基于TCP-IP協(xié)議的網(wǎng)絡(luò)通信服務(wù)器設(shè)計(jì).pdf
- udp服務(wù)器設(shè)計(jì)---課程設(shè)計(jì)
- videoconferencing on personal computers with tcp_ip
- 基于客戶機(jī)服務(wù)器模式的遠(yuǎn)程教學(xué)系統(tǒng)研究.pdf
- tcp傳輸程序課程設(shè)計(jì)
- 基于TCP-IP協(xié)議的接口服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 課程設(shè)計(jì)報(bào)告---udp服務(wù)器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論