网络编程基础集

来源:互联网 发布:王者荣耀输入法软件 编辑:程序博客网 时间:2024/06/04 19:38

1.1主机字节序和网络字节序

Linux通过函数来完成主机字节和网络字节之间的转换。
htonl 、 htons 、ntohl、ntohs四个函数来实现,
htonl(host to network long);
htons( host to network short );
ntohl(network to host long);
ntohs(network to host short);

1.2通用的socket地址

socket网络编程接口中表示socket地址的是一个结构体socketaddr;

struct socketaddr{     sa_family_t  sa_family;//地址族类型的变量     char sa_data[14];//存放socket地址值};

1.3专用socket地址

socketaddr_in 用于ipv4

struct socketaddr_in{    sa_family_t sin_family;//地址族AF_INET    u_int16_t  sin_port ;//端口号,需要用网络字节表示    struct   inaddr sin_addr;//IPV4地址结构体};//IPV4的结构体struct in_addr{    u_int32_t s_addr;//IPV4地址,要用网络字节表示;};

所有专用的socket地址类型的变量,在使用的时候都是需要强制转化socketaddr,因为所有的socket编程接口使用的地址参数类型都是socketaddr;

2.创建socket

int socket( int domain, int type, int protocol);
domain :告诉系统是哪一层协议族;PF_INET—>IPV4
PF_INET6—->IPV6
type :指定是流服务(SOCK_STREAM)还是数据报( SOCK_UGRAM);

protocol :通常是唯一的,我们应该是0;

3.命名socket

我们在创建socket时,我们只是给定了地址族协议,但是未制定是哪一个具体的socket地址。

int blind(int socketfd, const struct socketaddr *my_addr, socklen_t addrlen);

4.监听socket

int listen( int socketfd, int backlog);
backlog :参加监听的最大队列;如果客户端有超过backlog的值,那么就不做处理。

5.接受链接

int accept(int socketfd , struct socketaddr *addr, socketlen_t *addrlen);
accept成功时返回一个新的连接端socket地址,

6.发起连接

当服务器打开成功以后,就处于listen状态,但是客户端还要与之建立连接。
int connet(int socketfd , const struct socketaddr *serv_addr,socketlen_t addrlen);

7.关闭连接

close(int socketfd);

close系统调用并非总是立即关闭一个连接,而是将其计数减1;只有当fd的引用计数为0,才真正的关闭。

socket的过程:
这里写图片描述

三次握手的过程

这里写图片描述

四次挥手的过程

这里写图片描述

原创粉丝点击