网络编程 基本概念

目录

一、什么是Socket

二、什么是C/S模式

三、面向连接与面向消息

四、套接字类型

五、网络编程基本函数与基本数据结构


一、什么是Socket

Socket(套接字)是一种用于网络通信的编程接口。它允许不同计算机之间通过网络进行数据交换和通信。

Socket 提供了一种标准的通信机制,使得应用程序可以通过网络发送和接收数据。它可以用于在客户端和服务器之间建立连接,进行双向的数据传输。

Socket 编程通常包括以下几个步骤:

  1. 创建 Socket:在应用程序中创建一个 Socket 实例,用于处理网络通信。
  2. 绑定地址和端口:将 Socket 绑定到一个特定的 IP 地址和端口上,以便其他计算机可以通过这个地址和端口与该 Socket 进行通信。
  3. 监听连接请求:对于服务器端,Socket 可以监听来自客户端的连接请求,并接受连接。
  4. 建立连接:对于客户端,Socket 可以尝试与服务器建立连接。
  5. 数据传输:一旦连接建立,Socket 可以进行数据的发送和接收。

Socket 可以使用不同的协议(如TCP、UDP等)进行数据传输,具体选择哪种协议取决于应用程序的需求。

总的来说,Socket 提供了一种方便的编程接口,使得应用程序可以通过网络进行数据交换和通信。它在互联网和局域网中广泛应用于各种网络应用程序的开发。

二、什么是C/S模式

C/S模式是Client/Server模式的缩写,指的是客户端-服务器模式。在C/S模式中,系统功能被划分为客户端和服务器两部分,客户端负责提供用户界面和与用户交互的功能,而服务器端则负责处理数据和业务逻辑。

服务端:

  • 首先服务器先启动,并根据请求提供相应的服务:打开一个通信通道,在某一地址和端口上接收请求。等待客户请求到达该端口。
  • 接收到重复服务请求,处理该请求并发送应答信号。返回第二步,等待另一客户请求。
  • 关闭服务器。

客户端:

  • 打开一个通信通道,并连接到服务器所在主机的特定端口。
  • 向服务器发服务请求,等待并接收应答;继续提出请求。
  • 请求结束后关闭通信通道并终止。

C/S模式的特点包括:

  1. 分工明确:客户端和服务器各自承担特定的功能,相对独立。
  2. 数据集中管理:服务器端负责数据的存储和管理,保证数据的一致性和安全性。
  3. 灵活性:客户端与服务器之间的通信采用标准的网络通信协议,可以跨平台、跨语言进行通信。

C/S模式广泛应用于各种网络应用程序的开发,如Web应用、数据库系统、邮件系统等。相对于其他模式,C/S模式能够提供更高的灵活性和可扩展性,使得系统的功能分布更加合理,有利于实现复杂的业务逻辑和数据处理。

三、面向连接与面向消息

面向连接的套接字:

  • 传输过程中数据不会丢失
  • 按顺序传输数据
  • 传输的过程中不存在数据边界

面向消息的套接字:

  • 强调快速传输而非顺序
  • 传输的数据可能丢失也可能损毁
  • 限制每次传输数据的大小
  • 传输的数据有数据边界

数据边界:比如100个糖果分批传递,但是接收者需要凑集100个装袋

四、套接字类型

  1. SOCK_STREAM:

    • 对应于 TCP 协议,在套接字编程中使用该类型可以实现面向连接的、可靠的数据流传输。
    • 适合于需要可靠性和顺序性的数据传输,如文件传输、网页浏览等。
    • 使用 SOCK_STREAM 类型的套接字时,数据传输是面向连接的,数据是可靠的并且是按顺序传输的。
  2. SOCK_DGRAM:

    • 对应于 UDP 协议,在套接字编程中使用该类型可以实现无连接的、不可靠的数据报传输。
    • 适合于对实时性要求较高、可以容忍少量数据丢失的场景,例如音频/视频流、在线游戏等。
    • 使用 SOCK_DGRAM 类型的套接字时,每个数据包都是独立的,没有连接的概念,数据传输不保证可靠性和顺序性。
  3. SOCK_RAW:

    • 提供对网络层原始数据的访问,可以直接操作 IP 数据报,需要较高的权限,并且需要开发者自行处理协议头部等细节。
    • 通常用于实现特定的网络功能或协议的自定义处理,例如实现 ICMP 报文处理、特定网络协议的实现等。
    • 使用 SOCK_RAW 类型的套接字时,开发者需要自行处理协议相关的细节,包括构造和解析数据报等。

五、网络编程基本函数与基本数据结构

基本函数:

基本数据结构:

struct sockaddr {

    u_short sa_family; //16 位地址类型 2 字节

    char sa_data[14]; //14 字节地址数据:ip + port

};



struct sockaddr_in {

    short sin_family; //16 位地址类型

    u_short sin_port; //16 位端口号 65535 2 的16 次方struct in_addr sin_addr; //32 位 IP 地址 4 字节

    char sin_zero[8]; //8 字节填充
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dao-道法自然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值