




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗六 基于套接口復用的聊天室系統(tǒng)內容:建立一個容納63個客戶的聊天室。流程:1. 客戶端連接上聊天室服務器;2. 服務器把從一個客戶端收到的數據轉發(fā)給其它所有的客戶端;3. 客戶端顯示從服務器接收的數據服務器的流程如下BEGINWhile(1)把監(jiān)聽套接口和所有已連接套接口放入到查詢集合rset中;調用select()函數對rset中的套接口進行可讀性查詢;if(監(jiān)聽套接口有數據可讀)調用accept()函數來接受新客戶的連接;把新建立的已連接套接口放入到下一次查詢的rset中;對每一個(for each)有數據可讀的已連接套接口調用recv()函數來接收數據;if(客戶端斷開連接)把該套接
2、口從下一次查詢的rset中清除掉;跳轉到下一個有數據可讀的已連接套接口繼續(xù)處理(continue);把該套接口上接收到的數據,轉發(fā)給其它已連接套接口; / for each end/while(1) endEND客戶端的框架如下:/* 使用多線程的TCP聊天客戶端程序邏輯結構 */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, ); /主線程負責處理接收服務器的數據printf();要求:服務器的固定端口號為27015;TCP用套接口的復用來實現,有興趣的同學可以考慮實現基于UDP的程序;客戶端使用多線程來處理鍵盤的輸入和服務器數據的接收。服務器/ C1.cpp : 定義控制臺應用程序的入口點。/ C1.cpp : 定義控制臺應用程序的入口點。/#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 : 定義控制臺應用程序的入口點。/#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);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) /調用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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物制藥產品注冊申報有限合伙投資協(xié)議
- 電商平臺收益共享及市場拓展協(xié)議
- 2025年中國奧特萊斯行業(yè)市場情況研究及競爭格局分析報告
- 派出所用地協(xié)議書
- 智能家居公寓裝修與設備配置施工協(xié)議
- 稅務師事務所股權投資與風險管理合作協(xié)議
- 貨主和貨車協(xié)議書
- 水果購銷購協(xié)議書
- 拒絕簽解聘協(xié)議書
- 繼子女解除協(xié)議書
- 2024年廣西公需科目參考答案
- 溝通的藝術學習通超星期末考試答案章節(jié)答案2024年
- 2023年九年級中考數學微專題+鉛垂法求三角形面積課件
- 企業(yè)級IPv6網絡改造及升級服務合同
- 甘肅省2023年中考語文現代文閱讀真題及答案
- 安徽省合肥市科大附中2025年第二次中考模擬初三數學試題試卷含解析
- 市政工程單位、分部、分項工程劃分方案
- 2024至2030年中國磁性元器件市場前景及投資發(fā)展戰(zhàn)略研究報告
- 人力資源服務派遣合同范本(2024版)
- 河南省洛陽市2023-2024學年八年級下學期期末質量檢測英語試題
- CJT244-2016 游泳池水質標準
評論
0/150
提交評論