• C++ Socket学习记录 1


    1、IP的转换

      1)正转换  

        结构 sockaddr_in 在C++ 中表明一个IP地址结构,包含地址家,端口以及IP地址等信息

        如:

        sockaddr_in addr;
        addr.sin_family = AF_INET;    //指定地址家族 AF_INET 表明是TCP/IP 协议
            addr.sin_port = htons(1230);    //指定端口

        //在设置地址时,需要将点十进制地址转换为网络直接顺序

        //在较早时使用函数 inet_addr 进行转换

        //较新版本中,可以使用新函数 inet_pton 进行转换:

        int rnum = inet_pton(AF_INET,"127.0.0.1", &addr.sin_addr);

        使用 inet_pton 转化时,第一个参数为地址族,第二个参数为欲转换的点十进制IP,转换结果保存在第三个参数中,返回值 rnum ,转换成功时返回一个正数。

        if (rnum > 0 )

        {

          Printf ("转换成功!");

        }

      2)逆转换

        也可以将网络字节顺序反转化为点十进制地址

        使用函数 inet_ntop

        char ipStr[20];

        inet_ntop(AF_INET,(void*)&addr.sin_addr,ipStr,sizeof(addr));

        将转化结果保存到 ipStr (为 char* 也就是字符串)中。

    2、套接字 socket 的绑定

       1)创建套接字

        CSocket Sokt;

       2)套接字的绑定

        创建套接字后,需要将其绑定到特定的IP及端口,才能使用该套接字。

        套接字的绑定 BOOL Sokt.Bind((SOCKADDR*)lpAddr,int len)

        其中 lpAddr 为地址结构(类型为 SOCKADDR*),len 为地址结构长度

        则地址绑定可以写为

        Sokt.Bind((SOCKADDR*)addr,sizeof(addr));

        注:

          在绑定中 SOCKADDR 也表示地址结构,它与 sockaddr_in 的区别在于,sockaaddr_in 用于储存地址信息,而 SOCKADDR 是在使用过程中的类型(如函数传递时的参数),至于为什么这么设计,战术还没弄明白……感觉挺闹心的,在传递参数时直接将 sockaaddr_in 转换为 SOCKADDR即可。

       3)监听和链接

         在套接字绑定到特定IP和端口后,对于

         服务器端,需要使用 Listen 进行监听;客户端 则可以 使用Connect 链接服务器

         //服务器监听

         Sokt.Listen(5); //参数 5 表示同时监听的链接数,取值范围 1~5,,默认为 5

         //客户端链接

         Sokt.Connect((SOCKADDR*)&addr, sizeof(addr))

    这样,客户端与服务器之间的链接就建立了,接下来需要做的就是怎么样在服务端与客户端通信(数据的传输)

  • 相关阅读:
    数据库无限分级(分类表)
    从SQLserver中导出表数据到Access
    C# 对JS解析AJX请求JSON并绑定到html页面的一些心得
    高效的SQLSERVER分页查询(转载)
    Entity Framework自用的DataBase基类
    简单SVN使用方法
    CMD终端关于pip报错,scrapy报错的一种处理方法
    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作
    Primer C++第五版 读书笔记(一)
    分享一个编程学习网站:https://github.com/justjavac/free-programming-books-zh_CN
  • 原文地址:https://www.cnblogs.com/xtblog/p/5811962.html
Copyright © 2020-2023  润新知