MFC:网络编程TCPIP 附挺详细的注释

      最后更新:2022-04-24 00:08:45 手机定位技术交流文章

      因特网是因特网程序员的重要资源。虽然MFC包括自己的网络编程班,但使用这些班不是个好主意。下面的代码是MFC而不是MFC的代码。然而,为了今后有所改进,最好从头开始。我看过两三次基本原理大概知道怎么回事,但总体理解挺难的,敲敲代码 只能用和教科书一样的方式完成。未来,如何让这两个装置 彼此交谈。如何发送图片视频..学习进度还是好慢郁闷

      TCP/IP服务器代码一:
      #pragma 批注 (lib,'ws2_32. / 使用 WinSock 库的函数装入此动态链接库 。
      #include<WinSock2.h> //因为要使用WinSock库中的函数
      #include<stdio.h> //输入输出流
      #include
      using namespace std;
      void main()
      {
      cout<<“服务器”;
      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      WORD wVERSION 请求 ;/ 保存 WinSock 图书馆的版本号 。这不是 C++ 标准的类型 。这是微软SDK的那种。WORD是一字不差的。这是一个双字节( 16 位) 的无符号整数 。它表示范围为065535。
      WSADATA wsaData;// 存储 Windows 仓库初始化数据
      int err;

      wVersionRequested = MAKEWORD(1,1);

      err=WSAStartup(wVersionRequested,&wsaData);//加载套接字库,成功返回0
      if(err!=0)
      return;

      如果(LOBYTE)Wsadata.我不知道你在说什么, wVersion! ==若版本不对应,要终止 Socket 的使用, 请使用 WSACleanup 函数 。
      {
      WSACleanup();
      return;
      }

      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
      参数:AF_INET地址是家庭(在这种情况下,只有AF_INET或PF_INET)视窗对两者没有区别,SOCK_STREAM是根据TCP/IP(因此这是SOCK_STREAM)产生的。
      / 0 (根据地址格式和套接字类型选择相关协议)

      / / / / / / / / / / / / / / / / / / / / / / / / / /
      SOCKADDR_IN addrSrv;
      //struct sockaddr_in
      //{
      处理家庭AF_INNET;//短 sin_ family
      / 未签名的短端端口; / / 将分配到软件包的端口
      / 以_addr sin_addr; / 主机的 IP 地址 (32-bit IPv4) 建立
      // 填充使袜子和袜子结构长度相同并成功返回 0。
      //};
      addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
      htonl 函数将 INADR_ANY 值更改为网络字节顺序。 htonl 函数将主机字节的 u- long type 值翻译为 TCP/IP 字节顺序 。
      将数据传送或接收到指定给当地系统的任何IP地址。 当有许多带有多个IP的网页卡时,INADR_ANY可以简化程序。
      addrSrv.sin_family=AF_INET;
      我不知道你在说什么, ArdrSrv.sin_port=htons (600); / 要使用大于1024的端口 。 htons 函数将主机字节命令中的 u_ sort type 值翻译为 TCP/IP 网络字节命令 。
      bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
      / 创建包件并将其绑在本地地址和端口上。 参数( 设置受约束、 字符串本地地址信息、 地址结构长度) 。

      准备聆听客户的请求
      听( sockSrv, 5); / 参数( 设置词描述符, 这里的缓存为 5 ) (等待连接队列最长长度 )

      SOCKADD_IN addrCliet;/ 用于接收客户的通讯信息 SOCKADD_IN addrCliet;/ 用于接收客户的通讯信息
      / 在援引接受的第三个功能之前,必须提供一个起始值,即SOCKADD_IN = SOCKADD_IN (或, SOCKADD?) 结构的长度

      while(1)
      {
      /我们正在等待客户的查询。
      SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
      / 参数(设置用于监听状态的字词描述符,使用监听功能保存IP地址和端口信息,以便在客户开始与服务器连接时建立连接,返回受保护地址信息的时间长度)
      char sendBuf[100];
      Springf( sendBuf, “ 向客户端发送的信息 ”, inet_ entoa (addrCliet)( sin_address) );
      / sprintf 将准备的数据打印为字符串缓冲。 格式化客户端的地址, 并将其置于 SendBuff 字符值中 。
      /ind_entoa 转换为_addr 结构类型参数,以小数表示到 IP 地址字符串。
      另一方面, 内部_ addr 翻译字符串( IP 地址以小数格式, 例如, 翻译为适合给 S_ addr 的 u_ long 类型 的值)

      / - - 发送数据 - -
      send(sockConn,sendBuf,strlen(sendBuf)+1,0);
      / 添加一个额外的字节,以便接收者在收到数据后在数据字符串中附加一个结束符号。

      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      char recvBuf[100];
      recv(sockConn,recvBuf,strlen(sendBuf)+1,0);

      / 打印收到的数据
      printf("%s ",recvBuf);
      - - - - - - - - - - - - - - - - - - - - - - - -
      关闭已有连接( SockConn);/ 关闭已有连接
      如果情况不是死循环,在使用屏幕套件之后必须关闭监听,并采用WSACleanup方法结束套接字库的使用。
      }

      }

      TCP/IP 客户法第2号
      #pragma comment(lib, “ws2_32.lib”)
      #include<WinSock2.h>
      #include<stdio.h>
      #include
      #include
      using namespace std;
      void main()
      {
      cout<<“客户端”;
      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      WORD wVERSION 请求 ;/ 保存 WinSock 图书馆的版本号 。这不是 C++ 标准的类型 。这是微软SDK的那种。WORD是一字不差的。这是一个双字节( 16 位) 的无符号整数 。它表示范围为065535。
      WSADATA wsaData;// 存储 Windows 仓库初始化数据
      int err;

      wVersionRequested = MAKEWORD(1,1);

      err=WSAStartup(wVersionRequested,&wsaData);//加载套接字库,成功返回0
      if(err!=0)
      return;

      如果(LOBYTE)Wsadata.我不知道你在说什么, wVersion! ==若版本不对应,要终止 Socket 的使用, 请使用 WSACleanup 函数 。
      {
      WSACleanup();
      return;
      }

      - - - - - - - - - - - - - - - - - - - - - - - - - -
      SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

      / - - 向服务器发送连接请求 -
      / 配置服务器以接受连接 。
      SOCKADDR_IN addrSrv;
      我不知道你在说什么,ArdrSrv,我不知道你在说什么,sin_addr.S-un.S_addr=inet_addr (),//如果服务器和客户端都可以在当地访问,并且可以使用本地环地址
      addrSrv.sin_family=AF_INET;
      addrSrv.sin_port=htons(6000);
      connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      char recvBuf[100];
      recv(sockClient,recvBuf,100,0);
      printf("%s ",recvBuf);

      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      string sendBuf;
      while(’ '!=cin.peek())
      {
      cin>>sendBuf;
      send(sockClient,sendBuf.c_str(),strlen(sendBuf.c_str())+1,0);
      send(sockClient,“22”,strlen(“22”)+1,0);
      }

      - - - - - - - - - - - - - - - - - - - - - - - -
      closesocket(sockClient);
      WSACleanup();
      }

      UNDP/IP部分不正确, 代码没有明显不同, 也没有多少解释。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/22769.html

          热门文章

          文章分类