久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

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

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

【1】流程:

舉個例子:

買個手機和(he)卡

手(shou)機和卡必須匹配

將卡和手機進行綁定(ding)

設置為非(fei)飛行模型

進行通信

服務器端:

創建套接字(zi) socket( )

填充服務器網絡信息結構(gou)體(ti)

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

將(jiang)套(tao)接字設置為監聽(ting)狀態(tai) listen( )

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

進行通(tong)信 recv( )/send( )

客戶端:

創建套(tao)接字 socket( )

填充(chong)服務器(qi)網絡信息結構(gou)體

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

進行通信 send( )/recv( )

【2】socket( )

#include /* See NOTES */

#include

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

功能(neng):創(chuang)建套接字,返(fan)回文(wen)件描述(shu)符

參數:

domain:通信域(yu)(協議族)

AF_UNIX 本地通信

AF_INET 網(wang)絡通(tong)信

AF_PACKET 底層通信

type:類型

SOCK_STREAM 流式套接(jie)字 TCP

SOCK_DGRAM 數據報(bao)套接字(zi) UDP

SOCK_RAM 底(di)層的

protocol:協(xie)議

一般(ban)為(wei)0,如果需要(yao)其他協議則設(she)置

返回值:

成(cheng)功(gong):文件描(miao)述符

失敗:-1

【3】bind( )

#include /* See NOTES */

#include

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

功(gong)能:將套接字(zi)與(yu)網絡信(xin)息結(jie)構體綁定

參數:

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

addr:網絡信息(xi)結(jie)構體

通用的:

struct sockaddr {

sa_family_t sa_family; 2個字(zi)節

char sa_data[14]; 14個字節

}

一般(ban)使用:sockaddr_in

#include

struct sockaddr_in

{

__SOCKADDR_COMMON (sin_);

===>

#define __SOCKADDR_COMMON(sa_prefix) \

sa_family_t sa_prefix##family

在宏函數里面,##代碼表(biao)字符串(chuan)的(de)拼接

==>sa_family_t sin_family; 協議族 2個(ge)字節(jie)

in_port_t sin_port; 端口號 2個字節

struct in_addr sin_addr;

===>

struct in_addr {

__be32 s_addr; IP地址 4個字(zi)節

};

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

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;/定(ding)義變量

serveraddr.sin_family = AF_INET;//填(tian)充(chong)地(di)址(zhi)信息(xi) 地(di)址(zhi)族(zu)

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

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

功能:將(jiang)套接字設置(zhi)為監聽狀態

參數:

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

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

返回值:

成功:0

失敗:-1

【5】accept( )

#include /* See NOTES */

#include

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

功(gong)能:阻(zu)塞等待客(ke)戶(hu)端的連(lian)接(jie)請求

參數:

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

addr:網絡(luo)信息結構體(自動填充(chong)客戶(hu)端(duan)(duan)的信息,如果位NULL, 則(ze)得不到(dao)客戶(hu)端(duan)(duan)的IP地(di)址(zhi)和端(duan)(duan)口(kou)號)

addrlen:addr的長度(du)

返回值:

成功:文(wen)件(jian)描述符,用于通信

失敗:-1

【6】connect( )

#include /* See NOTES */

#include

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

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

參數:

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

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

addrlen:addr的(de)長度(du)

返回值:

成功:0

失敗:-1

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

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

熱點文章推(tui)薦
華(hua)清學員就業(ye)榜單(dan)
高(gao)薪學員(yuan)經驗(yan)分享(xiang)
熱點新聞(wen)推(tui)薦
前臺專線:010-82525158 企業培訓(xun)洽談專(zhuan)線:010-82525379 院校(xiao)合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部