中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用C++代碼實現簡易UDP網絡聊天室

發布時間:2022-10-14 15:34:23 來源:億速云 閱讀:157 作者:iii 欄目:編程語言

這篇文章主要介紹“如何用C++代碼實現簡易UDP網絡聊天室”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何用C++代碼實現簡易UDP網絡聊天室”文章能幫助大家解決問題。

NetSrv.cpp

//服務器端
#include<Winsock2.h>
#include<stdio.h>

void main()
{
//加載套接字庫

 WORD wVersionRequested;
 WSADATA wsaData;
 int err;

 wVersionRequested = MAKEWORD(1,1);
 
 err = WSAStartup(wVersionRequested,&wsaData);
 if(err!=0){
  return; 
 }

 if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){
  WSACleanup();
  return; 
 }


 //創建套接字
 SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);//第二個參數是數據報套接字

 SOCKADDR_IN addrSrv;//對于服務器端,也就是接收端,先進行一個綁定,定義一個地址結構體的變量
 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//對結構體中的成員進行賦值,用htonl轉換一下
 //將主機數轉換成無符號長整型的網絡字節順序。本函數將一個32位數從主機字節順序轉換成網絡字節順序。
 addrSrv.sin_family=AF_INET;//地址族
 addrSrv.sin_port=htons(6000);//端口號

 //綁定套接字
 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//將本地主機地址和端口進行綁定
 //套接字,地址結構的指針,地址結構的長度

 char recvBuf[100];//字符數組,接收信息
 char sendBuf[100];//發送信息
 char tempBuf[200];//存放中間數據

 SOCKADDR_IN addrClient;//在接收的時候,獲取對方的信息,地址結構體的變量
 int len=sizeof(SOCKADDR);//初始化,長度為,地址結構體的長度

 while(1)//保證通訊過程能夠持續進行
 {
  //等待并接收數據
  recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
  //套接字,接收數據buf,其長度,,地址結構的指針,指向整型的指針主要用來返回所接收的地址長度
  if("q"==recvBuf[0])//判斷接收的數據第一個字符是q嗎,
  {
   sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrClient,len);
   //若是,服務器也發一個q字符,套接字,q,長度多發一個字節,,地址用剛剛得到的,最后一個是地址結構的長度,通過len可得
   printf("Chat end!
");
   break;
  }
  //如果接收的不是q,那么對數據進行一個格式化,放到tempBuf中,點分十進制的ip地址,所接收的數據。
  sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf);

  printf("%s
",tempBuf);//將數據打印輸出

  //發送數據
  printf("please input data:
");
  
  gets(sendBuf);//從標準輸入流中獲取一行數據,當我們輸入一行數據,以回車,就把數據放到指定的內存指針中了。
  
  sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
  //套接字,所要發送的數據,(這個是數據長度,用strlen獲取)多發一個字節,所發送的地址,
  
 }
 
 //關閉套接字
 closesocket(sockSrv);
 WSACleanup();//終止對套接字的使用
}

NetClient.cpp

//客戶端
#include<Winsock2.h>
#include<stdio.h>

void main(){
 //加載套接字庫
 WORD wVersionRequested;
 WSADATA wsaData;
 int err;

 wVersionRequested = MAKEWORD(1,1);

 err = WSAStartup(wVersionRequested,&wsaData);
 if(err!=0){
  return;
 }
 if(LOBYTE(wsaData.wVersion)!=1|| HIBYTE(wsaData.wVersion)!=1){
  WSACleanup( );
  return;
 }
 //創建套接字
 SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
 //,類型(數據報),自動選擇合適協議

 SOCKADDR_IN addrSrv;
 //基于upd的客戶端(發送端),不需要去綁定,但是需要設置發送到對方機器的地址信息
 //服務器端的地址信息,因為在本機上,所以還是127.0.0.1),用inet_addr將點分十進制轉換成ulang類型
 addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 addrSrv.sin_family = AF_INET;
 addrSrv.sin_port = htons(6000);//設置服務器端程序在哪個端口上等待數據
 
 char recvBuf[100];//接收數據
 char sendBuf[100];//發送數據
 char tempBuf[200];//臨時數據的存儲
 
 int len = sizeof(SOCKADDR);//接收所返回的地址結構的長度

 while(1)
 {
  //發送數據
  printf("Please input data:
");
  gets(sendBuf);
  sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
  //等待并接收數據
  recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);
  if("q"==recvBuf[0])
  {
   sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
   printf("Chat end!
");
   break;
  }
  sprintf(tempBuf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);
  //服務器端ip地址信息(格式化),接收的數據
  printf("%s
",tempBuf);
  
 }
 //關閉套接字
 closesocket(sockClient);
 WSACleanup();
}

ws2_32.lib

如何用C++代碼實現簡易UDP網絡聊天室

如何用C++代碼實現簡易UDP網絡聊天室

關于“如何用C++代碼實現簡易UDP網絡聊天室”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴堡县| 景德镇市| 张家港市| 海南省| 许昌县| 东乌珠穆沁旗| 重庆市| 宁乡县| 嘉兴市| 囊谦县| 郓城县| 观塘区| 安远县| 忻城县| 邢台市| 浙江省| 保康县| 称多县| 静宁县| 甘肃省| 阳谷县| 杭州市| 嫩江县| 多伦县| 高雄县| 科技| 雅江县| 宜都市| 政和县| 印江| 曲靖市| 含山县| 安宁市| 平和县| 乌鲁木齐市| 龙川县| 平定县| 南漳县| 安多县| 乌拉特后旗| 沅江市|