亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > TCP網(wǎng)絡(luò)編程詳解

TCP網(wǎng)絡(luò)編程詳解 時(shí)間:2018-08-28      來源:未知

【1】流程:

舉個(gè)例子:

買個(gè)手機(jī)和卡

手機(jī)和卡必須匹配

將卡和手機(jī)進(jìn)行綁定

設(shè)置為非飛行模型

進(jìn)行通信

服務(wù)器端:

創(chuàng)建套接字 socket( )

填充服務(wù)器網(wǎng)絡(luò)信息結(jié)構(gòu)體

將套接字與網(wǎng)絡(luò)信息結(jié)構(gòu)體綁定 bind( )

將套接字設(shè)置為監(jiān)聽狀態(tài) listen( )

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

進(jìn)行通信 recv( )/send( )

客戶端:

創(chuàng)建套接字 socket( )

填充服務(wù)器網(wǎng)絡(luò)信息結(jié)構(gòu)體

發(fā)送客戶端的連接請(qǐng)求 connect( )

進(jìn)行通信 send( )/recv( )

【2】socket( )

#include /* See NOTES */

#include

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

功能:創(chuàng)建套接字,返回文件描述符

參數(shù):

domain:通信域(協(xié)議族)

AF_UNIX 本地通信

AF_INET 網(wǎng)絡(luò)通信

AF_PACKET 底層通信

type:類型

SOCK_STREAM 流式套接字 TCP

SOCK_DGRAM 數(shù)據(jù)報(bào)套接字 UDP

SOCK_RAM 底層的

protocol:協(xié)議

一般為0,如果需要其他協(xié)議則設(shè)置

返回值:

成功:文件描述符

失敗:-1

【3】bind( )

#include /* See NOTES */

#include

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

功能:將套接字與網(wǎng)絡(luò)信息結(jié)構(gòu)體綁定

參數(shù):

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

addr:網(wǎng)絡(luò)信息結(jié)構(gòu)體

通用的:

struct sockaddr {

sa_family_t sa_family; 2個(gè)字節(jié)

char sa_data[14]; 14個(gè)字節(jié)

}

一般使用:sockaddr_in

#include

struct sockaddr_in

{

__SOCKADDR_COMMON (sin_);

===>

#define __SOCKADDR_COMMON(sa_prefix) \

sa_family_t sa_prefix##family

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

==>sa_family_t sin_family; 協(xié)議族 2個(gè)字節(jié)

in_port_t sin_port; 端口號(hào) 2個(gè)字節(jié)

struct in_addr sin_addr;

===>

struct in_addr {

__be32 s_addr; IP地址 4個(gè)字節(jié)

};

沒有用,為了是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);//填充地址信息 端口號(hào)

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);

功能:將套接字設(shè)置為監(jiān)聽狀態(tài)

參數(shù):

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

backlog:允許同時(shí)處理客戶端的個(gè)數(shù),一般設(shè)置為5 10

返回值:

成功:0

失敗:-1

【5】accept( )

#include /* See NOTES */

#include

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

功能:阻塞等待客戶端的連接請(qǐng)求

參數(shù):

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

addr:網(wǎng)絡(luò)信息結(jié)構(gòu)體(自動(dòng)填充客戶端的信息,如果位NULL, 則得不到客戶端的IP地址和端口號(hào))

addrlen:addr的長度

返回值:

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

失敗:-1

【6】connect( )

#include /* See NOTES */

#include

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

功能:發(fā)送客戶端的連接請(qǐng)求

參數(shù):

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

addr:服務(wù)器網(wǎng)絡(luò)信息結(jié)構(gòu)體

addrlen:addr的長度

返回值:

成功:0

失敗:-1

上一篇:linux字符設(shè)備驅(qū)動(dòng)框架及編寫流程

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

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 青青草视频网站 | 国产三级a三级三级 | 91久久精一区二区三区大全 | 人人人人凹人人爽人人澡 | 99热这里只有精品久久免费 | 国产一级毛片一区二区三区 | 欧美人成一本免费观看视频 | 日本人jizz| 欧美性生活一级 | 激情啪啪精品一区二区 | 精品9e精品视频在线观看 | 日本特黄特黄刺激大片免费 | 久久一区二区三区免费播放 | 日本一线a视频免费观看 | 日本中出 | 老子影院午夜精品欧美视频 | 免费不卡视频 | 果冻传媒mv国产推荐视频 | 日本大片久久久高清免费看 | 久久国产精品99久久久久久老狼 | 久草资源总站 | jizzjizz日本高清免费 | 国产欧美一区二区精品性色tv | 99热这里只有精品国产免费 | 日韩亚洲成a人片在线观看 日韩亚洲国产综合久久久 日韩亚洲精品不卡在线 | 精品久久久久久久一区二区手机版 | 久久瑟 | www日本高清 | 色资源在线观看 | 亚洲人成在线播放网站 | 亚洲国产成人久久一区二区三区 | 国产丝袜福利 | 免费一级肉体全黄毛片 | 黄色片18| 国产成人爱片免费观看视频 | 精品久久久久久久一区二区伦理 | 国产高清看片日韩欧美久久 | 人成午夜视频 | 99热这里只有精品国产99 | 日韩精品成人在线 | 女女同性一区二区三区四区 |