日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

210130阶段三socket服务器

發布時間:2024/4/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 210130阶段三socket服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、學習的知識點
    • 基于socket服務器
      • socket函數
      • bind函數
      • listen函數
      • accept函數
  • 二、上課沒有聽懂或者沒有理解的地方
  • 三、當天學習的收獲

一、學習的知識點

  • 每個上網的電腦都有唯一的IP地址
  • 一個電腦的進程有唯一的端口號(應用層的),進程不跑就沒有端口號。
  • IP端口最多65536個,80端口是網頁端口。
  • IP分為外網IP和內網IP
  • 網關是路由器的IP地址
  • DNS域名解析 服務器,將域名如 baidu.com 解析成 點分十進制 的格式
  • 實時通信,socket通信協議 套接字,還有http ftp ssh通信協議,都是基于TCP/IP或UDP協議棧
  • TCP更可靠 有3次握手,實時性高
  • UDP更快,不用握手,但不可靠,基于數據包,會丟失,視頻或文件時
  • 基于socket服務器

    socket函數

    • 功能:創建一個套接字用于通信
    • 原型:int socket(int domain,int type,int protocol);
    • 參數:
      • domain: 指定通信協議族 如AF_INET IPV4協議
      • type: 指定socket類型,SOCK_STREAM 流式套接字,SOCK_DGRAM數據報套接字,SOCK_RAW 原始套接字
      • protocol: 協議類型 IPPRCTO_TCP 表示IP協議棧的TCP協議
    • 返回值:套接口描述字,與文件描述符類似,簡稱套接字。失敗返回 -1

    bind函數

    • 功能:綁定一個本地地址到套接字
    • 原型:int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
    • 參數:
      • sockfd: socket函數返回的套接字
      • addr: 要綁定的地址
      • addrlen: 地址長度
    • 返回值:成功返回0,失敗返回 -1

    listen函數

    • 功能:將套接字用于監聽接入的連接
    • 原型:int listen(int sockfd,int backlog);
    • 參數:
      • sockfd: socket函數返回的套接字
      • backlog: 規定內核為此套接字排隊的最大連接個數,完成三次握手的和未完成三次握手(只完成一次或兩次)的數量不能超過 backlog。SOMAXCONN 128
    • 返回值:成功返回0,失敗返回 -1

    accept函數

    連接成功后取走 listen 中完成三次握手的隊列對應客戶端的數據

    • 功能:從已完成連接隊列返回第一個連接,若已完成連接隊列為空,則阻塞
    • 原型:int accept(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
    • 參數:
      • sockfd: 服務器套接字
      • addr: 將返回對等方的套接字地址
      • addrlen: 返回對等方的套接字地址長度
    • 返回值:成功返回客戶端文件描述符,失敗返回 -1
    int main() {//1. 創建一個套接字int socket_fd = socket(AF_INET, SOCK_STREAM, 0); //AF_INET ipv4 SOCK_STREAM流式套接字if (socket_fd == -1)ERR_EXIT("socket");//2. 綁定IP和端口struct sockaddr_in ser_add;ser_add.sin_family = AF_INET;ser_add.sin_port = htons(8091); //把8090端口號轉換成網絡字節序ser_add.sin_addr.s_addr = htonl(INADDR_ANY); //本機的測試ip 127.0.0.1 或本機真正ip //inet_aton("192.168.", &ser_add.sin_addr);或者真正ipint ret = bind(socket_fd, (struct sockaddr*)&ser_add, sizeof(ser_add));//綁定服務器的IPif (ret == -1)ERR_EXIT("bind");//setsockopt(socket_fd, SOL_SOCKET, SO_REUSEPORT, (char*)&ser_add, sizeof(ser_add)); 端口復用ret = listen(socket_fd, SOMAXCONN);//3. 監聽的時候,設置已經完成三次握手的客戶端的個數的最大值if (ret == -1)ERR_EXIT("listen");struct sockaddr_in cli_add; //客戶端結構體socklen_t add_len = sizeof(cli_add);//4. 如果沒有客戶端完成三次握手,程序會阻塞在acceptcout << "wait" << endl;int con_fd=accept(socket_fd, (struct sockaddr*)&cli_add, &add_len); //接收 成功返回用于通信的fdif (con_fd == -1)ERR_EXIT("accept");cout << "someone on line..." << endl;char buf[64] = { 0 };read(con_fd,buf,64);cout << buf << endl;//nc 127.0.0.1 8091/*客戶端int ret=0;int sockfd=socket(AF_INET,SOCK_STREAM,0)struct sockaddr_in addr;addr.sinfamily=AF_INET;addr.sin_port=htons(8090);inet_aton("192.168.254.132",addr.sin_addr);ret=connect(sockfd,(struct sockaddr*)&addr,sizeof(addr));if(ret!=0){}cout << "connect success" << endl;read(sockfd,"hello omo",64);*/return 0; }

    二、上課沒有聽懂或者沒有理解的地方

    三、當天學習的收獲

    進程間通信-共享內存、socket服務器

    總結

    以上是生活随笔為你收集整理的210130阶段三socket服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。