




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include #include #pragma comment(lib,ws2_32.lib)/*定義客戶(hù)端連接上后的聊天線(xiàn)程函數(shù)*/DWORD WINAPI ClientThread(LPVOID lpParam)SOCKET sock = (SOCKET)lpParam;/定義連接客戶(hù)端的套接字char szBuff2048;/定義接收緩沖區(qū)char szMessage2048;/定義發(fā)送的消息int ret,nLeft,idx;/nLeft,idx用以控制寫(xiě)緩沖的數(shù)據(jù),以保證數(shù)據(jù)寫(xiě)入正確/提示輸入exit退出聊天puts(輸入exit可退出聊天n);/進(jìn)入數(shù)據(jù)傳輸循環(huán),即聊天/缺陷是
2、只能一人一句來(lái)回對(duì)話(huà)while(1)/ 接收 /ret = recv(sock,szBuff,2048,0);if(ret = 0) break;else if(ret = SOCKET_ERROR)printf(recv() failed:%dn,WSAGetLastError();break;szBuffret = 0;/判斷對(duì)方發(fā)過(guò)來(lái)的是否為exit退出命令,若是則退出聊天繼續(xù)監(jiān)聽(tīng)if(!strcmp(szBuff,exit) printf(對(duì)方已經(jīng)停止聊天!n);printf(服務(wù)器正在監(jiān)聽(tīng));break;printf(客戶(hù):%sn,szBuff);/在控制臺(tái)打印客戶(hù)的聊天語(yǔ)句/ 回復(fù)
3、 /printf(發(fā)送消息:); /服務(wù)器輸入數(shù)據(jù)回答客戶(hù)gets(szMessage);/若發(fā)送為空,則傳送不說(shuō)話(huà)三字,并提示if(strlen(szMessage)=0)printf(發(fā)送不能為空哦n);strcpy(szMessage,不說(shuō)話(huà)!);/傳送數(shù)據(jù)nLeft = strlen(szMessage);idx = 0;/確保寫(xiě)進(jìn)所有數(shù)據(jù)while(nLeft0)ret = send(sock,&szMessageidx,nLeft,0);if(ret = 0)break;else if(ret = SOCKET_ERROR)printf(send error!%dn,WSAGetL
4、astError();break;nLeft-=ret;idx +=ret;/判斷szMessage是否為exit命令,若是則退出聊天繼續(xù)監(jiān)聽(tīng)if(!strcmp(szMessage,exit) printf(連接正在斷開(kāi)!n);printf(服務(wù)器繼續(xù)監(jiān)聽(tīng)n);break;return 0;/主函數(shù)int main(int argc, char* argv)WSADATA wsd;/定義WINSOCK32消息結(jié)構(gòu)體SOCKET sServSock;/服務(wù)器端的套接字SOCKET sConns;/服務(wù)器的各連接HANDLE hThread;/定義處理客戶(hù)連接的縣城DWORD dwThreadI
5、d;/定義線(xiàn)程IDchar szAddress128;/監(jiān)聽(tīng)的地址struct hostent *host = NULL;/定義本地地址指針sockaddr_in local,client;/分別定義本地,客戶(hù)端的地址結(jié)構(gòu)int nSockErr;/定義出錯(cuò)信息printf(請(qǐng)你輸入監(jiān)聽(tīng)地址(格式如202.204.118.138):);gets(szAddress);int nAddrLen = sizeof(client);/得到地址結(jié)構(gòu)長(zhǎng)度/初始化Winsock32庫(kù)if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)printf(failed to load w
6、insock!n);return 1;/建立socket對(duì)象sServSock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);/流套接字,面向連接/為socket分配端口地址監(jiān)聽(tīng)local.sin_family = AF_INET;local.sin_port = htons(5150);/監(jiān)聽(tīng)端口/若地址出錯(cuò)則監(jiān)聽(tīng)本機(jī)地址if(local.sin_addr.s_addr = inet_addr(szAddress)=INADDR_NONE)puts(所輸入的地址不正確,本服務(wù)將使用本機(jī)地址!);/得到主機(jī)名if(gethostname(szAddress,
7、sizeof(szAddress)=SOCKET_ERROR)/得到本機(jī)的域名,名稱(chēng) puts(Cant getting local host name.);/通過(guò)主機(jī)名得到主機(jī)IP地址host = gethostbyname(szAddress);/得到本地ipif(host)CopyMemory(&local.sin_addr,host-h_addr_list0,host-h_length);elseprintf(gethostbyname() failed:%dn,WSAGetLastError();Sleep(5000);return 1;/將套接字綁定到本機(jī)地址local上if(bi
8、nd(sServSock,(LPSOCKADDR)&local,sizeof(local)=SOCKET_ERROR)nSockErr = WSAGetLastError();printf(bind error:%d!n, nSockErr);return 1;/監(jiān)聽(tīng)客戶(hù)連接請(qǐng)求if(listen(sServSock,5)=SOCKET_ERROR)nSockErr =WSAGetLastError();printf(listen error:%dn, nSockErr);return 1;/提示狀態(tài)printf(服務(wù)器啟動(dòng)成功!n);printf(服務(wù)器正在監(jiān)聽(tīng)n);/進(jìn)入處理連接循環(huán)whi
9、le(1)/若有客戶(hù)連接,則接受連接sConns = accept(sServSock,(struct sockaddr *)&client,&nAddrLen);if(sConns = INVALID_SOCKET)nSockErr = WSAGetLastError();printf(accept error %dn,nSockErr);break;/連接正確則提示可以開(kāi)始聊天printf(%s:%d連接到了本服務(wù),現(xiàn)在可以聊天了.n,inet_ntoa(client.sin_addr),ntohs(client.sin_port);/創(chuàng)建一個(gè)線(xiàn)程用于聊天hThread = CreateT
10、hread(NULL,0,ClientThread, (LPVOID)sConns,0,&dwThreadId);if(hThread = NULL)printf(CreateThread() failed %dn,GetLastError();break;/聊天結(jié)束關(guān)閉聊天線(xiàn)程,繼續(xù)監(jiān)聽(tīng)CloseHandle(hThread);closesocket(sServSock);WSACleanup();return 0;/*客戶(hù)端*/#includestdafx.h#include#include#pragmacomment(lib,ws2_32.lib)intmain(intargc,char
11、*argv)WSADATAwsd;/定義winsock32信息結(jié)構(gòu)SOCKETsClient;/定義本地套接字charszBuffer2048;/定義接受的緩沖charszMessage2048;/發(fā)送的消息charszServer128;/連接的服務(wù)器地址,IP地址intret;structsockaddr_inserver;/定義連接的服務(wù)器地址structhostent*host=NULL;/定義地址/提示輸入連接的服務(wù)器地址printf(請(qǐng)輸入連接的服務(wù)器IP地址(如:202.204.118.138):);gets(szServer);/初始winsock庫(kù)if(WSAStartup(
12、MAKEWORD(2,2),&wsd)!=0)printf(FailedtoloadWinsocklibrary!n);Sleep(5000);return1;/strcpy(szMessage,我是*);/建立socket對(duì)象sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sClient=INVALID_SOCKET)printf(socket()failed:%dn,WSAGetLastError();Sleep(5000);return1;/定義服務(wù)器地址以發(fā)送信息server.sin_family=AF_INET;server.si
13、n_port=htons(5150);/端口server.sin_addr.s_addr=inet_addr(szServer);/若沒(méi)有地址,則將地址設(shè)置為本機(jī)地址if(server.sin_addr.s_addr=INADDR_NONE)puts(所輸入服務(wù)器地址不正確,本將使用本機(jī)地址!);/得到主機(jī)名if(gethostname(szServer,sizeof(szServer)=SOCKET_ERROR)/得到本機(jī)的域名,名稱(chēng)puts(Cantgettinglocalhostname.);/通過(guò)主機(jī)名得到IPhost=gethostbyname(szServer);if(host=N
14、ULL)printf(Unabletoresolveserver:%sn,szServer);Sleep(5000);return1;CopyMemory(&server.sin_addr,host-h_addr_list0,host-h_length);/建立連接if(connect(sClient,(structsockaddr*)&server,sizeof(server)=SOCKET_ERROR)printf(connect()failed:%dn,WSAGetLastError();Sleep(5000);return1;/提示當(dāng)前狀態(tài)puts(連接成功,現(xiàn)在可以聊天了!n);pu
15、ts(輸入exit可退出聊天n);/進(jìn)入聊天狀態(tài)while(1)/發(fā)送printf(發(fā)送消息:);/寫(xiě)入發(fā)送信息gets(szMessage);if(strlen(szMessage)=0)printf(發(fā)送不能為空哦n);strcpy(szMessage,不說(shuō)話(huà)!);/發(fā)送信息ret=send(sClient,szMessage,strlen(szMessage),0);if(ret=0)elseif(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();Sleep(5000);/判斷輸入信息是否為exit命令,若是則退出if(!strcmp(szMessage,exit)printf(你已經(jīng)退出了聊天!);break;/printf(send%dbyten,ret);/接收回復(fù)的信息ret=recv(sClient,szBuffer,2048,0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專(zhuān)科醫(yī)院醫(yī)療體檢中介合作協(xié)議
- 電動(dòng)汽車(chē)換電站安全運(yùn)營(yíng)及維護(hù)保養(yǎng)合同
- 機(jī)器人諧波減速器壽命測(cè)試臺(tái)租賃與測(cè)試報(bào)告生成合同
- 生物制造中試基地委托運(yùn)營(yíng)與市場(chǎng)拓展管理協(xié)議
- 高端影視基地全天候安保與安全監(jiān)控服務(wù)協(xié)議
- 抖音平臺(tái)內(nèi)容糾紛仲裁協(xié)議書(shū)
- 寵物醫(yī)院品牌合作經(jīng)營(yíng)授權(quán)合同范本
- 離婚協(xié)議中婚前個(gè)人房產(chǎn)權(quán)益保障合同
- 影視音樂(lè)制作保密協(xié)議及知識(shí)產(chǎn)權(quán)歸屬合同
- 急性顱腦外傷的急救流程
- 與信仰對(duì)話(huà) 課件-2024年入團(tuán)積極分子培訓(xùn)
- 高三英語(yǔ)一輪復(fù)習(xí)備考實(shí)踐經(jīng)驗(yàn)分享 課件
- 小學(xué)五年級(jí)體育教案全冊(cè)(人教版)
- 新人教版高中英語(yǔ)必修二 unit 5詞匯默寫(xiě)本
- 2024至2030年中國(guó)節(jié)能服務(wù)產(chǎn)業(yè)市場(chǎng)預(yù)測(cè)及投資策略分析報(bào)告
- 六年級(jí)《語(yǔ)文下冊(cè)》期末試卷及答案【可打印】
- 10SMS202-2 埋地矩形雨水管道及其附屬構(gòu)筑物(磚、石砌體)
- 十字相乘法因式分解習(xí)題100道及答案
- NB-T31052-2014風(fēng)力發(fā)電場(chǎng)高處作業(yè)安全規(guī)程
- 山東省濰坊市濰城區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末考試英語(yǔ)試題
- 慢性淋巴增殖性疾病的診斷課件
評(píng)論
0/150
提交評(píng)論