2.Socket繼承QThread的雙線程使用

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ù)->點分十進制

3.1 socket
3.2 QTcpSocket
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容