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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容