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
socket通信圖
3.1 sockaddr和sockaddr_in詳解
struct sockaddr和struct sockaddr_in這兩個結(jié)構(gòu)體用來處理網(wǎng)絡(luò)通信的地址.
-
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)絡(luò)字節(jié)序的整數(shù)值。(host to net)
inet_addr()作用是將一個IP字符串轉(zhuǎn)化為一個網(wǎng)絡(luò)字節(jié)序的整數(shù)值,用于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:點分十進制->二進制整數(shù)
inet_pton:二進制整數(shù)->點分十進制