美文网首页
2.Socket继承QThread的双线程使用

2.Socket继承QThread的双线程使用

作者: YanyZhao | 来源:发表于2020-11-02 22:03 被阅读0次

    1、http://blog.sina.com.cn/s/articlelist_2801495241_0_1.html

    Thread

    2 Thread
    2.1 继承QThread

    实现多线程的方法:

    • Qthread(传统方法):继承自Qthread,实现run()函数,执行Qthread的start函数,线程开始执行。
    2.2 槽机制 QObject

    3 Socket

    socket通信图
    3.1 sockaddr和sockaddr_in详解

    struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址.

    • sockaddr:在头文件#include <sys/socket.h>中定义,sockaddr的缺点:sa_data把目标地址和端口信息混在一起,如下:
    struct sockaddr {  
        sa_family_t sin_family;//地址族
        char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息               
       }; 
    
    • sockaddr_in:在头文件#include <netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr分开储存在两个变量中,如下:
    struct sockaddr_in {  
        sa_family_t sin_family;//地址族
        uint16_t sin_port; //16位TCP、UDP端口号
        struct in_addr sin_addr; //32位IP地址  
        char sin_zero[8]; //不使用             
       };
    

    其中结构体in_addr,用来存放32位IP地址。

    struct in_addr
    {
      In_addr_t s_addr; //32位IPv4地址
    };
    

    注:inet_addr在头文件#include <arpa/inet.h>定义

    小结:
    htons()作用是将端口号由主机字节序转换为网络字节序的整数值。(host to net)
    inet_addr()作用是将一个IP字符串转化为一个网络字节序的整数值,用于sockaddr_in.sin_addr.s_addr。

    socket 赋值地址、端口的方法
    <netinet/in.h>中的宏定义:
    • #define INET_ADDRSTRLEN 16 /*for IPV4 dotted-decimal */
    • #define INET6_ADDRSTRLEN 46 /*for IPV6 hex string */

    inet_ntop:点分十进制->二进制整数
    inet_pton:二进制整数->点分十进制

    3.1 socket
    3.2 QTcpSocket

    相关文章

      网友评论

          本文标题:2.Socket继承QThread的双线程使用

          本文链接:https://www.haomeiwen.com/subject/ydekuctx.html