TCP/IP网络编程笔记Chapter I -3网络编程各基础函数的使用方法


在上一篇我们已经大概理解网络编程与套接字是做什么用的,本篇我们需要学会使用网络编程各基础函数的使用方法

1.套接字类型与协议设置-socket函数

#include<sys/socket.h>
int socket(int domin,int type,int protocol);
  • 成功返回文件描述符,失败返回-1
  • domain是套接字使用的协议族信息,我们将重点讲解PF_INET对应的IPv4协议族
    在这里插入图片描述
  • type 是传输的类型信息
    ①面向连接的套接字SOCK_STREAM特点:套接字必须一一对应;可靠的、按序传递的、基于字节的面向连接的套接字
    ②面向消息的套接字SOCK_DGRAM特点:不可靠的、不按序传递的、以高速传输为目的套接字
面向连接的套接字SOCK_STREAM 面向消息的套接字SOCK_DGRAM
传输过程中数据不会消失 传输的数据可能丢失可能损毁
按序传输数据 强调快速传输而非传输顺序
传输的数据不存在边界 传输的数据存在边界
限制每次传输的数据大小
  • protocol 是计算机通信使用的协议信息
    大部分情况下传递0,除非同一协议族中存在多个数据传输方式相同的协议,才进行指定

eg
IPv4协议族中面向连接的套接字

int tcp_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

IPv4协议族中面向消息的套接字

int udp_socket = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);

2.地址族与数据序列-bind函数

(1)IP地址与端口号

①IP地址
IP是网络协议的简写,是为了收发网络数据而分配给计算机的值,IP地址分为两类IPv4和IPv6,IPv4是四字节地址族、而IPv6是16字节地址族。
②端口号
端口号是为了区分程序中创建的套接字而分配给套接字的序号,也就是说操作系统此端口号把数据传输给相应端口的套接字。
在这里插入图片描述
端口号由16位构成,可分配的范围0-65535(0 - 2^16 -1)但是0-1023分配给特定程序,所以应当分配此范围外的值。注:TCP套接字和UDP套接字不会共用端口号,允许重复。

(2)地址信息的表示

本节以IPv4为核心,讨论目标地址的表示方法,假如我们需要表示IPv4地址族,IP地址是211.204.214.76,端口号2048,我们需要用一个结构体作为地址传递给bind函数

struct sockaddr_in
{
   
	sa_family_t		sin_family;//地址族
	unint16_t		sin_port;//16位端口号unsigned short类型
	struct in_addr	sin_addr;//32位IP地址
	char 			sin_zero[8];//不使用
}

其中内含的另一个结构体in_addr用来存放32位IP地址如下

struct in_addr
{
   
	in_addr_t	s_addr;//32位IPv4,unsigned long类型
}

下面说明sockaddr_in各个成员

  • sin_family:每种协议族使用的地址族都不同,IPv4是4字节地址族、而IPv6是16字节地址族。
    在这里插入图片描述
  • sin_port:以网络字节序保存的16位端口号(网络字节序后面说明)
  • sin_addr:以网络字节序保存的32位IP地址信息
  • sin_zero[8]:填充0
    此外,int bind(int sockfd,struct sockaddr,socklen_t addrlen);由于bind函数需要struct sockaddr的参数,如下
struct sockaddr
{
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值