1站楚、http://blog.sina.com.cn/s/articlelist_2801495241_0_1.html
Thread
2 Thread
2.1 繼承QThread
實現(xiàn)多線程的方法:
- Qthread(傳統(tǒng)方法):繼承自Qthread,實現(xiàn)run()函數(shù)弛矛,執(zhí)行Qthread的start函數(shù)浴麻,線程開始執(zhí)行得问。
2.2 槽機制 QObject
3 Socket
3.1 sockaddr和sockaddr_in詳解
struct sockaddr和struct sockaddr_in這兩個結(jié)構(gòu)體用來處理網(wǎng)絡通信的地址.
-
sockaddr:在頭文件
#include <sys/socket.h>
中定義,sockaddr的缺點:sa_data把目標地址和端口信息混在一起软免,如下:
struct sockaddr {
sa_family_t sin_family;//地址族
char sa_data[14]; //14字節(jié)宫纬,包含套接字中的目標地址和端口信息
};
-
sockaddr_in:在頭文件
#include <netinet/in.h>或#include <arpa/inet.h>
中定義,該結(jié)構(gòu)體解決了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]; //不使用
};
其中結(jié)構(gòu)體in_addr
,用來存放32位IP地址。
struct in_addr
{
In_addr_t s_addr; //32位IPv4地址
};
注:inet_addr
在頭文件#include <arpa/inet.h>
定義
小結(jié):
htons()
作用是將端口號由主機字節(jié)序轉(zhuǎn)換為網(wǎng)絡字節(jié)序的整數(shù)值蝌蹂。(host to net)
inet_addr()
作用是將一個IP字符串轉(zhuǎn)化為一個網(wǎng)絡字節(jié)序的整數(shù)值噩斟,用于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
:點分十進制->二進制整數(shù)
inet_pton
:二進制整數(shù)->點分十進制