2.Socket继承QThread的双线程使用
2020-11-02 本文已影响0人
YanyZhao
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>
定义
socket 赋值地址、端口的方法小结:
htons()
作用是将端口号由主机字节序转换为网络字节序的整数值。(host to net)
inet_addr()
作用是将一个IP字符串转化为一个网络字节序的整数值,用于sockaddr_in.sin_addr.s_addr。
<netinet/in.h>
中的宏定义:
-
#define INET_ADDRSTRLEN 16
/*for IPV4 dotted-decimal */ -
#define INET6_ADDRSTRLEN 46
/*for IPV6 hex string */
inet_ntop
:点分十进制->二进制整数
inet_pton
:二进制整数->点分十进制