C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室_第1頁
C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室_第2頁
C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室_第3頁
C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室SOCKADDR_INaddrSrv;//對于服務(wù)器端,也就是接收端,先進(jìn)行一個綁定,定義一個地址結(jié)構(gòu)體的變量

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//對結(jié)構(gòu)體中的成員進(jìn)行賦值,用htonl轉(zhuǎn)換一下

//將主機數(shù)轉(zhuǎn)換成無符號長整型的網(wǎng)絡(luò)字節(jié)順序。本函數(shù)將一個32位數(shù)從主機字節(jié)順序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序。

addrSrv.sin_family=AF_INET;//地址族

addrSrv.sin_port=htons(6000);//端口號

//綁定套接字

bind(sockSrv,(SOCKADDR*)addrSrv,sizeof(SOCKADDR));//將本地主機地址和端口進(jìn)行綁定

//套接字,地址結(jié)構(gòu)的指針,地址結(jié)構(gòu)的長度

charrecvBuf[100];//字符數(shù)組,接收信息

charsendBuf[100];//發(fā)送信息

chartempBuf[200];//存放中間數(shù)據(jù)

SOCKADDR_INaddrClient;//在接收的時候,獲取對方的信息,地址結(jié)構(gòu)體的變量

intlen=sizeof(SOCKADDR);//初始化,長度為,地址結(jié)構(gòu)體的長度

while(1)//保證通訊過程能夠持續(xù)進(jìn)行

//等待并接收數(shù)據(jù)

recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)addrClient,len);

//套接字,接收數(shù)據(jù)buf,其長度,,地址結(jié)構(gòu)的指針,指向整型的指針主要用來返回所接收的地址長度

if('q'==recvBuf[0])//判斷接收的數(shù)據(jù)第一個字符是q嗎,

sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)addrClient,len);

//若是,服務(wù)器也發(fā)一個q字符,套接字,q,長度多發(fā)一個字節(jié),,地址用剛剛得到的,最后一個是地址結(jié)構(gòu)的長度,通過len可得

printf("Chatend!\n");

break;

//如果接收的不是q,那么對數(shù)據(jù)進(jìn)行一個格式化,放到tempBuf中,點分十進(jìn)制的ip地址,所接收的數(shù)據(jù)。

sprintf(tempBuf,"%ssay:%s",inet_ntoa(addrClient.sin_addr),recvBuf);

printf("%s\n",tempBuf);//將數(shù)據(jù)打印輸出

//發(fā)送數(shù)據(jù)

printf("pleaseinputdata:\n");

gets(sendBuf);//從標(biāo)準(zhǔn)輸入流中獲取一行數(shù)據(jù),當(dāng)我們輸入一行數(shù)據(jù),以回車,就把數(shù)據(jù)放到指定的內(nèi)存指針中了。

sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)addrClient,len);

//套接字,所要發(fā)送的數(shù)據(jù),(這個是數(shù)據(jù)長度,用strlen獲取)多發(fā)一個字節(jié),所發(fā)送的地址,

//關(guān)閉套接字

closesocket(sockSrv);

WSACleanup();//終止對套接字的使用

}

NetClient.cpp

//客戶端

#includeWinsock2.h

#includestdio.h

voidmain(){

//加載套接字庫

WORDwVersionRequested;

WSADATAwsaData;

interr;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,wsaData);

if(err!=0){

return;

if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){

WSACleanup();

return;

//創(chuàng)建套接字

SOCKETsockClient=socket(AF_INET,SOCK_DGRAM,0);

//,類型(數(shù)據(jù)報),自動選擇合適協(xié)議

SOCKADDR_INaddrSrv;

//基于upd的客戶端(發(fā)送端),不需要去綁定,但是需要設(shè)置發(fā)送到對方機器的地址信息

//服務(wù)器端的地址信息,因為在本機上,所以還是127.0.0.1),用inet_addr將點分十進(jìn)制轉(zhuǎn)換成ulang類型

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);//設(shè)置服務(wù)器端程序在哪個端口上等待數(shù)據(jù)

charrecvBuf[100];//接收數(shù)據(jù)

charsendBuf[100];//發(fā)送數(shù)據(jù)

chartempBuf[200];//臨時數(shù)據(jù)的存儲

intlen=sizeof(SOCKADDR);//接收所返回的地址結(jié)構(gòu)的長度

while(1)

//發(fā)送數(shù)據(jù)

printf("Pleaseinputdata:\n");

gets(sendBuf);

sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)addrSrv,len);

//等待并接收數(shù)據(jù)

recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)addrSrv,len);

if('q'==recvBuf[0])

sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)addrSrv,len);

printf("Chatend!\n");

break;

sprintf(tempBuf,"%ssay:%s",inet_ntoa(addrSrv.sin_addr),recvBuf);

//服務(wù)器端ip地址信息(格式化),接收的數(shù)據(jù)

pri

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論