套接字、网络字节序、socket编程接口

原文:https://blog.csdn.net/qq_39290490/article/details/80981745 

套接字--IP地址+端口号

 1.IP地址----确认插入互联网中的某一台主机
  IP数据包头中有两个IP地址:源IP地址与目的IP地址,源MAC地址与目的MAC地址
  2.端口号=进程号,确定某台主机上的某一个进程
  3.套接字确定了互联网中某台主机上的某一个进程。
  4.PID表示惟一的一个进程,在任何场景都适用,而端口号也表示唯一一个进程,在网络场景下适用。
  5.一个进程可能绑定多个端口号,而一个端口号不能绑定多个进程。以打电话为例,10086相当于进程IP,而客服相当于端口号。
  6.在ICP/IP协议中,用本地地址(源IP地址)、本地端口号(源端口号)、远程地址(目的IP地址)、远程端口号(目的端口号)、协议(协议号)这样的五元组来表示两个不同主机间的一个完整通信。一般在一个网络环境中进程的唯一标识由三元组标识:协议、本地地址、本地端口号
网络字节序
    网络数据流同样有大小端之分。
    1.大小端
    数据的高字节对应内存的低地址,数据的低字节对应内存的高地址,这样的为大端,否则为小端

    2.为方便主机双方通信无障碍,TCP/IP协议规定网络数据流必须采用大端字节序
    3.不论这台主机是大端机还是小端机,都采用TCP/IP协议来收发数据。即大端数据直接收发,小端数据先转为大端数据再收发。数据
    发送时先发内存低地址,再发内存高地址。接收也是先内存低地址接收,再内存高地址接收,数据从高字节到低字节。即低地址发送
    高字节接收,高地址发送低字节接收


      
socket编程接口
    创建套接字(TCP/UDP,客户端+服务器)
int socket(int domain, int type, int protocol);
 ​    domain是用于创建套接字所使用的协议族,协议族决定了socket的地址类型。通信中对应的地址有:
         AF_UNIX(只在本机内通信的套接字)
          AF_INET(IPv4协议)
          AF_INET6(IPv6协议)
    type是指定socket类型。主要是:
         SOCK_STREAM:创建TCP流套接字,提供面向连接的可靠的数据传输。   
         SOCK_DGRAM:创建UDP流套接字,提供无连接不可靠的数据传输。

    protocol:指定协议,通常设置为0。
    绑定套接字(TCP/UDP,服务器)
int bind(int socket,const struct sockaddr *address,socklen_t address_len);
​   socket即创建出来的套接字;address是一个const struct sockaddr*指针,指向要绑定的协议地址;addr_len是对应的地址长度。
    通常服务器在启动的时候会绑定一个地址,用于提供服务,客户可通过它来连接服务器。而客户端不需要指定,系统自动分配一个端口号和IP地址。
    监听套接字(TCP/UDP,服务器)--将套接字状态有创建变为监听,等待客户连接请求
int listen(int sockfd, int backlog);
    接收套接字(TCP,服务器端)
int accept(int socket,struct sockaddr *address,socklen_t address_len);
    建立连接(TCP,客户端)
int connect(int socket,const struct sockaddr *address,socklen_t address_len);
    connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过    调用connect函数来建立与服务器的连接。
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值