【网络编程】网络编程套接字(一)

这篇具有很好参考价值的文章主要介绍了【网络编程】网络编程套接字(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络编程预备知识

认识端口号

端口号(port)是传输层协议的内容.

端口号是一个2字节16位的整数;
端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
一个端口号只能被一个进程占用.

既然端口号是用来标识一个进程,而我们之前学习进程的时候,pid也可以标识一个进程,那他们之间有什么关系呢?

端口号可以标识一个进程,pid也可以标识一个进程,但是一个端口号只能标识一个进程,而一个进程可以被多个端口号标识,而进程pid与进程是一一对应的。
并且,我们可以通过我们身边的例子来理解,例如我们在出生之后都会有一个身份证号来标识一个,但是在学校的时候通常使用学号来标识一个人,工作的时候通常使用工号来表示一个人,并不是所有的进程都会进行网络通信,反过来只有一少部分进程进行网络通信,大部分都是本地进程,所以使用pid来标识网络通信是不合适的。

理解源端口号和目的端口号

上一篇文章提到了IP地址的作用,通过IP地址和MAC地址可以标识全网唯一的一台机器,而这里的端口号可以唯一的确定一台主机中唯一的一个进程。
我们需要明确的是:

进行网络通信,并不只是两台主机建立联系,而主要任务是在建立联系之后,我们进行进程间通信,将一个进程的数据通过网络传送给另外一个进程,所以与之前的匿名管道,命名管道,信号量,共享内存等进程间通信的方式比较,只是通过网络进行传输而已。

传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 “数据是谁发的, 要发给谁”;

认识TCP协议和UDP协议

此处我们也是对UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识;

传输层协议
无连接
不可靠传输
面向数据报


此处我们先对TCP(Transmission Control Protocol 传输控制协议)有一个直观的认识;

传输层协议
有连接
可靠传输
面向字节流

网络字节序

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?
其实,网络中的数据流传输都是通过大端方式的,但是可能我们的主机是小端,所以我们就需要 引入几个接口来实现大小端的转换:
【网络编程】网络编程套接字(一),网络编程,网络,运维
记忆方法:

这些函数名很好记,h表示host,n表示network,l表示32位长整数,s表示16位短整数。
例如htonl表示将32位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送。
如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回 ;
如果主机是大端字节序,这些 函数不做转换,将参数原封不动地返回。

如何区分大小端?

大端就是将高位字节存在低地址处,低位字节存在高地址处。
小端就是将高位字节存在高地址处,低位字节存在低地址处。

sockaddr结构

1.socket 常见API

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)

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

// 绑定端口号 (TCP/UDP, 服务器)

int bind(int socket, const struct sockaddr *address, socklen_t address_len);

// 开始监听socket (TCP, 服务器)

int listen(int socket, int backlog);

// 接收请求 (TCP, 服务器)

int accept(int socket, struct sockaddr* address, socklen_t* address_len);

// 建立连接 (TCP, 客户端)

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

后边在使用时会介绍这些接口。

2.sockaddr结构

socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及后面要讲的UNIX Domain Socket. 然而, 各种网络协议的地址格式并不相同,例如我们不仅可以通过这套接口进行网络之间通信,也可以进行域间套接字通信,所以为了保持接口一致性,设计出了不同的结构,在传参时,传入不同的结构即可。
【网络编程】网络编程套接字(一),网络编程,网络,运维
sockaddr_in结构体用于跨网络通信,sockaddr_un结构体用于本地通信,之所以可以在传入参数时可以通过不同参数来确定网络间通信或者本地通信,因为sockaddr_in和sockaddr_un前两个字节是相同的,是用来标定协议家族的,所以我们要对结构体进行填充,在调用时进行强转成sockaddr类型再传入。

sockaddr结构
【网络编程】网络编程套接字(一),网络编程,网络,运维

sockaddr_in结构
【网络编程】网络编程套接字(一),网络编程,网络,运维文章来源地址https://www.toymoban.com/news/detail-525566.html

到了这里,关于【网络编程】网络编程套接字(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【JavaEE】网络编程之TCP套接字、UDP套接字

    【JavaEE】网络编程之TCP套接字、UDP套接字

    目录 1.网络编程的基本概念 1.1为什么需要网络编程  1.2服务端与用户端 1.3网络编程五元组  1.4套接字的概念 2.UDP套接字编程 2.1UDP套接字的特点  2.2UDP套接字API 2.2.1DatagramSocket类 2.2.2DatagramPacket类  2.2.3基于UDP的回显程序 2.2.4基于UDP的单词查询  3.TCP套接字编程 3.1TCP套接字的特

    2023年04月20日
    浏览(67)
  • 【JaveEE】网络编程之TCP套接字、UDP套接字

    【JaveEE】网络编程之TCP套接字、UDP套接字

    目录 1.网络编程的基本概念 1.1为什么需要网络编程  1.2服务端与用户端 1.3网络编程五元组  1.4套接字的概念 2.UDP套接字编程 2.1UDP套接字的特点  2.2UDP套接字API 2.2.1DatagramSocket类 2.2.2DatagramPacket类  2.2.3基于UDP的回显程序 2.2.4基于UDP的单词查询  3.TCP套接字编程 3.1TCP套接字的特

    2023年04月13日
    浏览(446)
  • 【Linux网络编程】网络编程套接字二

    【Linux网络编程】网络编程套接字二

    喜欢的点赞,收藏,关注一下把! TCP和UDP在编程接口上是非常像的,前面我们说过TCP是面向连接的,UDP我们上篇博客也写过了,我们发现UDP服务端客户端写好启动直接就发消息了没有建立连接。TCP是建立连接的,注定在写的时候肯定有写不一样的地方。具体怎么不一样,我们

    2024年04月15日
    浏览(52)
  • 网络编程套接字(3)——Java数据报套接字(UDP协议)

    网络编程套接字(3)——Java数据报套接字(UDP协议)

    目录 一、Java数据报套接字通信模型 二、UDP数据报套接字编程 1、DatagramSocket         (1)DatagramSocket构造方法         (2)DatagramSocket方法 2、DatagramPacket         (1)DatagramPacket构造方法         (2)DatagramPacket方法 3、InetSocketAddress 三、代码示例:回显服务

    2024年03月12日
    浏览(115)
  • 网络编程【TCP流套接字编程】

    网络编程【TCP流套接字编程】

    目录 TCP流套接字编程 1.ServerSocket API 2.Socket API 3.TCP中的长短连接 4.回显程序(短连接) 5.服务器和客户端它们的交互过程 6.运行结果及修改代码   ❗❗两个核心: ServerSocket     Socket 1.ServerSocket API ✨ ServerSocket 是创建 TCP服务端Socket的API ServerSocket 构造方法: ServerSocket 方法 :

    2023年04月12日
    浏览(280)
  • UDP网络套接字编程

    UDP网络套接字编程

    先来说说数据在网络上的传输过程吧,我们知道系统其实终究是根据冯诺依曼来构成的,而网络数据是怎么发的呢? 其实很简单,网络有五层。如下: 如上图,我们知道的是,每层对应的操作系统中的那些地方,有些可能说是网络有七层,其实和这个五层一样的。下面我们

    2024年02月04日
    浏览(47)
  • 【网络编程】网络编程套接字(三)TCP网络程序

    【网络编程】网络编程套接字(三)TCP网络程序

    与前边的UDP网络程序相同,创建套接字的接口都是socket,下边对socket接口进行介绍: 协议家族选择AF_INET,因为我们要进行网络通信。 而第二个参数,为服务类型,传入SOCK_STREAM,我们编写TCP程序,所以要选择流式的服务。 第三个参数默认传入0,由前两个参数就可以推出这是

    2024年02月16日
    浏览(43)
  • 【网络编程】网络编程 和 Socket 套接字认识

    【网络编程】网络编程 和 Socket 套接字认识

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络提供了更为丰富的网络资源:

    2023年04月15日
    浏览(256)
  • 6.网络编程套接字(上)

    6.网络编程套接字(上)

    大家好,我是晓星航。今天为大家带来的是 网络编程套接字 相关的讲解!😀 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络

    2024年02月10日
    浏览(46)
  • 网络编程套接字(Socket)

    网络编程套接字(Socket)

    认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 能够实现一个简单的udp客户端/服务器; 能够实现一个简单的tcp客户端/服务器(单连接版本, 多进程版本, 多线程版本); 理解tcp服务器建立连接, 发送数据, 断开连接的流程; 通俗易懂地说,源

    2024年01月21日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包