套接字编程之接口(1)

简介: 套接字编程,通俗的来说:主要讲解的是如何编写一个网络通信程序1.网络通信的数据汇总都会包含一个完整的为五元组(sip[源端ip地址]、sport[源端端口]、dip[目的端IP地址]dport、protocol[协议]);五元组完成的描述了数据从哪里来到哪里去,用的是什么数据格式。2.网络通信,通常讨论的是俩个主机之间的通信:客户端&服务端 客户端网络通信程序:通常指的是用户使用的一端 服务端网络通信程序:通常指的是网络编写服务端程序的工作3.同时我们需要了解:客户端永远都是首先发起服务请求的一端,因为服务器是不知道客户端的地址的,现在用的是动态地址分配,每次上网地址可能发生改变,

学习套接字之前你需要知道的


套接字编程,通俗的来说:主要讲解的是如何编写一个网络通信程序


1.网络通信的数据汇总都会包含一个完整的为五元组(sip[源端ip地址]、sport[源端端口]、dip[目的端IP地址]dport、protocol[协议]);五元组完成的描述了数据从哪里来到哪里去,用的是什么数据格式。

2.网络通信,通常讨论的是俩个主机之间的通信:客户端&服务端

 客户端网络通信程序:通常指的是用户使用的一端

 服务端网络通信程序:通常指的是网络编写服务端程序的工作

3.同时我们需要了解:客户端永远都是首先发起服务请求的一端,因为服务器是不知道客户端的地址的,现在用的是动态地址分配,每次上网地址可能发生改变,开发客户端程序都写入了服务端的地址和端口,因此客户端是知道服务端的地址,还有一种原因,只有客户发送了请求,服务端才能提供对应的服务。

套接字编程


套接字


 套接字:socket(插座、接口)的翻译,通常表示的是系统提供给程序员实现网络通信的一套接口,为啥封装这些接口呢?因为我们知道,网络通信中有很多的协议, 所以在这套接口中就提供了足够充足的选择。我们通常使用的主要是两个协议的通信程序编写:传输层的TCP和UDP协议


TCP协议和UDP协议区别

image.png

UDP协议的编写


UDP通信两端流程


服务端:


创建套接字–建立当前进程与网卡之间的关联,在内核中,创建了一个socket结构体

为套接字绑定地址信息,给创建的socket结构体,内部描述源端IP地址和端口

(1) 告诉系统收到的数据中凡是地址和端口是我绑定就交给我处理

(2)发送数据的时候,源端地址就是绑定的地址信息绑定的地址,必须是当前设备所拥有的地址

接收数据:从内核的socket结构体接收缓冲区中取出数据

发送数据:将数据放到内核socket结构体的发送缓冲区中,什么时候实际发送出去,由系统决定

不通信了,就关闭套接字,释放资源

客户端:


创建套接字

为套接字绑定地址信息(不推荐)

一个端口只能被一个网络进程占用。因此一旦客户端程序中绑定的固定的地址这个客户端就只能运行一个了,并且还有端口

冲突的风险。

发送数据

如果绑定了地址信息,则源端地址就是绑定的,如果没有绑定地址信息,则系统会选择一个合适的地址和端口进行自动绑定。

接收数据

不需要考虑,只需要从接收缓冲区取出数据即可

不通信了则关闭套接字释放资源。

image.png



目录
相关文章
|
6月前
|
存储 Python
Python网络编程基础(Socket编程)UDP客户端编程
【4月更文挑战第9天】在UDP通信中,客户端负责发送数据到服务器,并接收来自服务器的响应。与服务器不同,客户端通常不需要绑定到特定的地址和端口,因为它可以临时使用任何可用的端口来发送数据。下面,我们将详细讲解UDP客户端编程的基本步骤。
|
6月前
|
网络协议 Python
Python网络编程基础(Socket编程)创建UDP socket对象
【4月更文挑战第8天】在Python中创建UDP服务器涉及使用`socket`模块创建socket对象,如`udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)`,然后绑定到特定IP地址和端口,如`udp_socket.bind(('localhost', 12345))`。服务器通过`recvfrom`在无限循环中监听和接收数据报。这只是基础,实际应用还需处理接收、解析、响应及错误处理等。接下来可学习如何利用socket对象进行数据交互以构建完整服务器。
|
存储 Cloud Native Linux
C++封装了socket通信类
C++封装了socket通信类
|
5月前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装
118 0
|
网络协议 Unix 程序员
套接字编程之接口(2)
套接字:socket(插座、接口)的翻译,通常表示的是系统提供给程序员实现网络通信的一套接口,为啥封装这些接口呢?因为我们知道,网络通信中有很多的协议, 所以在这套接口中就提供了足够充足的选择。我们通常使用的主要是两个协议的通信程序编写:传输层的TCP和UDP协议。
78 0
|
网络协议 安全 定位技术
网络编程概述、网络编程三要素、InetAddress类及端口和协议介绍
网络编程概述、网络编程三要素、InetAddress类及端口和协议介绍
94 0
|
网络协议 安全
套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
108 0
套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
套接字编程:UDP通信程序
套接字编程:UDP通信程序
125 0
网络编程基础-Socket编程(使用socketserver实现一对多通信)
由socket模块换成socketserver模块后,改动不大,主要是服务端的代码要进行改动,客户端的代码基本不用动。服务端要继承BaseRequestHandler类。这个类在初始化的时候,它会依次调用3个方法。子类可以覆盖这些方法。
网络编程基础-Socket编程(使用socketserver实现一对多通信)