版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗六 基于套接口復(fù)用的聊天室系統(tǒng)內(nèi)容:建立一個容納63個客戶的聊天室。流程:1. 客戶端連接上聊天室服務(wù)器;2. 服務(wù)器把從一個客戶端收到的數(shù)據(jù)轉(zhuǎn)發(fā)給其它所有的客戶端;3. 客戶端顯示從服務(wù)器接收的數(shù)據(jù)服務(wù)器的流程如下BEGINWhile(1)把監(jiān)聽套接口和所有已連接套接口放入到查詢集合rset中;調(diào)用select()函數(shù)對rset中的套接口進行可讀性查詢;if(監(jiān)聽套接口有數(shù)據(jù)可讀)調(diào)用accept()函數(shù)來接受新客戶的連接;把新建立的已連接套接口放入到下一次查詢的rset中;對每一個(for each)有數(shù)據(jù)可讀的已連接套接口調(diào)用recv()函數(shù)來接收數(shù)據(jù);if(客戶端斷開連接)把該套接
2、口從下一次查詢的rset中清除掉;跳轉(zhuǎn)到下一個有數(shù)據(jù)可讀的已連接套接口繼續(xù)處理(continue);把該套接口上接收到的數(shù)據(jù),轉(zhuǎn)發(fā)給其它已連接套接口; / for each end/while(1) endEND客戶端的框架如下:/* 使用多線程的TCP聊天客戶端程序邏輯結(jié)構(gòu) */void _cdecl get_keyboard_input(void * param)SOCKET sock = (SOCKET) param;While(1)char info1024;gets(info);send(sock, info, strlen(info), 0);int main()SOCKET so
3、ck=socket();connect(sock,);_beginthread(get_keyboard_input, 0, (void *)sock); /啟動線程處理鍵盤輸入while(1)recv(sock, ); /主線程負責(zé)處理接收服務(wù)器的數(shù)據(jù)printf();要求:服務(wù)器的固定端口號為27015;TCP用套接口的復(fù)用來實現(xiàn),有興趣的同學(xué)可以考慮實現(xiàn)基于UDP的程序;客戶端使用多線程來處理鍵盤的輸入和服務(wù)器數(shù)據(jù)的接收。服務(wù)器/ C1.cpp : 定義控制臺應(yīng)用程序的入口點。/ C1.cpp : 定義控制臺應(yīng)用程序的入口點。/#include stdafx.h#include#prag
4、ma comment(lib,ws2_32.lib)int _tmain(int argc, _TCHAR* argv)int i;WSADATA wsaData;int err = WSAStartup(MAKEWORD(2,2),&wsaData);if(0 != err)return -1;SOCKET sock;sock = socket(AF_INET,SOCK_STREAM,0);if(sock = INVALID_SOCKET)WSACleanup();return -1;sockaddr_in server;server.sin_family = AF_INET;server.
5、sin_port = htons(27015);server.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sock,(SOCKADDR*)&server,sizeof(server) = SOCKET_ERROR)closesocket(sock);WSACleanup();return -1;if(listen(sock,1) = SOCKET_ERROR)closesocket(sock);WSACleanup();return -1;#define MAXC 63SOCKET clientMAXC;for( i=0;iMAXC;i+)clienti
6、 = INVALID_SOCKET;fd_set rset,allset;FD_ZERO(&allset);FD_SET(sock,&allset);#define MAXS 1024char bufMAXCMAXS;for(;)rset = allset;int ret = select(0,&rset,NULL,NULL,NULL);if(ret = SOCKET_ERROR)break;if(ret = 0)continue;if(FD_ISSET(sock,&rset)struct sockaddr_in cliaddr;int clilen = sizeof(cliaddr);SOC
7、KET sockconn = accept(sock,(sockaddr *)&cliaddr,&clilen);if(sockconn = INVALID_SOCKET)break;for(i = 0; iMAXC; i+)if(clienti = INVALID_SOCKET)clienti = sockconn;break;if(iMAXC)FD_SET(sockconn,&allset);elseprintf(客戶端太多n);closesocket(sockconn);for(i=0; iMAXC; i+)if(clienti != INVALID_SOCKET)& FD_ISSET(
8、clienti,&rset)memset(bufi,0,MAXS);int nbyte = recv(clienti,bufi,sizeof(bufi),0);if(strcmp(bufi,) = 0)printf(client%d退出,i);elseprintf(client%d發(fā)送:%s,i,buf);if(nbyte = SOCKET_ERROR)FD_CLR(clienti,&allset);closesocket(clienti);clienti = INVALID_SOCKET;continue;if(nbyte = 0)FD_CLR(clienti,&allset);closes
9、ocket(clienti);clienti =INVALID_SOCKET;continue;send(clienti,bufi,sizeof(bufi),0);closesocket(sock);WSACleanup();return 0;客戶端/ S1.cpp : 定義控制臺應(yīng)用程序的入口點。/#include stdafx.h#include #pragma comment(lib,ws2_32.lib)#include void _cdecl get_keyboard_input(void * param)SOCKET sock1 =(SOCKET)param;printf(輸入聊天
10、內(nèi)容:n);while(1)char info1024; fgets(info, sizeof(info), stdin); send(sock1,info,strlen(info),0);memset(info,0,1024);int _tmain(int argc, _TCHAR* argv) SOCKET sock;WSADATA wsaData;if (WSAStartup(MAKEWORD(2,1),&wsaData) /調(diào)用Windows Sockets DL0printf(Winsock無法初始化!n);WSACleanup();return 0;char dest_ip=10.3.121.96;/本機的地址struct sockaddr_in server;server.sin_family=AF_INET;server.sin_port=htons(27015); /server的監(jiān)聽端口server.sin_addr.s_addr = inet_addr(dest_ip); sock=socket(AF_INET,SOCK_STREAM,0);int err = connect(sock,(sockaddr *)&server,sizeof(server);if(SOCKET_ERROR = err)printf(連接錯誤);_beginth
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玩具用服裝商業(yè)機會挖掘與戰(zhàn)略布局策略研究報告
- 牙科用導(dǎo)電漆商業(yè)機會挖掘與戰(zhàn)略布局策略研究報告
- 國際公法服務(wù)行業(yè)營銷策略方案
- 蜂箱用巢礎(chǔ)市場分析及投資價值研究報告
- 帶有時鐘的收音機產(chǎn)品供應(yīng)鏈分析
- 安全網(wǎng)產(chǎn)業(yè)鏈招商引資的調(diào)研報告
- 廢舊金屬回收利用行業(yè)相關(guān)項目經(jīng)營管理報告
- 衛(wèi)星傳輸帶寬出租行業(yè)營銷策略方案
- 電路測試儀產(chǎn)品供應(yīng)鏈分析
- 急診科護士的溝通技巧與患者關(guān)懷
- 應(yīng)對突發(fā)事件的應(yīng)急響應(yīng)與復(fù)盤總結(jié)
- 《重大危險源界定》課件
- 人工智能的道德與倫理問題
- 二手車市場項目招商引資方案
- 新媒體視聽節(jié)目制作 第三章 新媒體視聽節(jié)目的“策劃之道”
- 浙江省杭州市西溪中學(xué)2023-2024學(xué)年八年級上學(xué)期期中科學(xué)試卷
- 2023年2月抗菌藥物臨床應(yīng)用監(jiān)測與評估報告
- 八年級上冊美術(shù)-5《中國山水畫》【課件】
- 工程量清單及招標(biāo)控制價編制、審核入庫類服務(wù)方案
- 浙江省嘉興市2023年八年級上學(xué)期期中數(shù)學(xué)試卷(附答案)
評論
0/150
提交評論