色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > TCP網絡編程詳解

TCP網絡編程詳解 時間:2018-08-28      來源:未知

【1】流程:

舉個例子:

買個手機和卡

手機和卡必須匹配

將卡和手機進行綁定

設置為非飛行模型

進行通信

服務器端:

創建套接字 socket( )

填充服務器網絡信息結構體

將套接字與網絡信息結構體綁定 bind( )

將套接字設置為監聽狀態 listen( )

阻塞等待客戶端的連接請求 accept( )

進行通信 recv( )/send( )

客戶端:

創建套接字 socket( )

填充服務器網絡信息結構體

發送客戶端的連接請求 connect( )

進行通信 send( )/recv( )

【2】socket( )

#include /* See NOTES */

#include

int socket(int domain, int type, int protocol);

功能:創建套接字,返回文件描述符

參數:

domain:通信域(協議族)

AF_UNIX 本地通信

AF_INET 網絡通信

AF_PACKET 底層通信

type:類型

SOCK_STREAM 流式套接字 TCP

SOCK_DGRAM 數據報套接字 UDP

SOCK_RAM 底層的

protocol:協議

一般為0,如果需要其他協議則設置

返回值:

成功:文件描述符

失敗:-1

【3】bind( )

#include /* See NOTES */

#include

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

功能:將套接字與網絡信息結構體綁定

參數:

sockfd:文件描述符,socket的返回值

addr:網絡信息結構體

通用的:

struct sockaddr {

sa_family_t sa_family; 2個字節

char sa_data[14]; 14個字節

}

一般使用:sockaddr_in

#include

struct sockaddr_in

{

__SOCKADDR_COMMON (sin_);

===>

#define __SOCKADDR_COMMON(sa_prefix) \

sa_family_t sa_prefix##family

在宏函數里面,##代碼表字符串的拼接

==>sa_family_t sin_family; 協議族 2個字節

in_port_t sin_port; 端口號 2個字節

struct in_addr sin_addr;

===>

struct in_addr {

__be32 s_addr; IP地址 4個字節

};

沒有用,為了是sockaddr_in和sockaddr保持大小一致

unsigned char sin_zero[sizeof (struct sockaddr) -

__SOCKADDR_COMMON_SIZE -

sizeof (in_port_t) -

sizeof (struct in_addr)];

};

addrlen:addr的長度

返回值:

成功:0

失敗:-1

例子:

struct sockaddr_in serveraddr;/定義變量

serveraddr.sin_family = AF_INET;//填充地址信息 地址族

serveraddr.sin_port = htons(9999);//填充地址信息 端口號

serveraddr.sin_addr.s_addr = inet_addr(“192.168.2.27”);//填充地址信息 IP地址

if(bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr_in)) < 0)

{

perror("fail to bind");

exit(1);

}

【4】listen( )

#include /* See NOTES */

#include

int listen(int sockfd, int backlog);

功能:將套接字設置為監聽狀態

參數:

sockfd:文件描述符,socket的返回值

backlog:允許同時處理客戶端的個數,一般設置為5 10

返回值:

成功:0

失敗:-1

【5】accept( )

#include /* See NOTES */

#include

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

功能:阻塞等待客戶端的連接請求

參數:

sockfd:文件描述符,socket的返回值

addr:網絡信息結構體(自動填充客戶端的信息,如果位NULL, 則得不到客戶端的IP地址和端口號)

addrlen:addr的長度

返回值:

成功:文件描述符,用于通信

失敗:-1

【6】connect( )

#include /* See NOTES */

#include

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

功能:發送客戶端的連接請求

參數:

sockfd:文件描述符,socket的返回值

addr:服務器網絡信息結構體

addrlen:addr的長度

返回值:

成功:0

失敗:-1

上一篇:linux字符設備驅動框架及編寫流程

下一篇:C++繼承這樣學,讓你快速掌握

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 日本五月天婷久久网站 | 久久人妻av无码中文专区 | 欧美香蕉爽爽人人爽 | 性色a | 国产成人无码性教育视频 | 国产精品无码一区二区三区免费看 | 中文字幕色AV一区二区三区 | 欧美丰满熟妇XXXX性PPX人交 | 亚洲αv在线精品糸列 | 亚洲AV无码精品色午夜 | 熟睡被义子侵犯中文字幕 | 忘忧草日本在线WWW日本 | 中文字幕乱码免费 | 欧美黑人性暴力猛交 | 欧美午夜精品久久久久免费视 | 无码 人妻 在线 视频 | 男男GAY啪啪网站18禁 | 伊人久久大香线蕉av网站 | 免费观看成人毛片a片 | 中文亚洲AV片在线观看无码 | 狠狠色丁香婷婷综合影院 | 亚洲欧美另类久久久精品能播放的 | 欧美日韩最新 | 牛牛视频一区二区三区 | 真人视频一级毛片 | 北条麻妃初尝试黑人 | 国产成人A在线观看网站站 亚洲日韩中文第一精品 | 玩丰满熟妇XXXX视频 | 鲁鲁夜夜天天综合视频 | 国产精品免费久久久久影院 | 国产精品一区在线观看你懂的 | 涩涩av在线| 亚洲精品成AV人片天堂无码 | 日韩欧美一区精品 | 欧美成人aaa片一区国产精品 | 国产成人AV大片在线观看 | 亚洲欧洲中文日韩久久AV乱码 | 色婷婷综合和线在线 | 亚洲AV无码午夜国产精品色软件 | 久久久久久亚洲Av无码精品专口 | 欧美中文|