套接字编程之接口(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



目录
相关文章
|
7月前
|
存储 Python
Python网络编程基础(Socket编程)UDP客户端编程
【4月更文挑战第9天】在UDP通信中,客户端负责发送数据到服务器,并接收来自服务器的响应。与服务器不同,客户端通常不需要绑定到特定的地址和端口,因为它可以临时使用任何可用的端口来发送数据。下面,我们将详细讲解UDP客户端编程的基本步骤。
|
网络协议 Unix 程序员
套接字编程之接口(2)
套接字:socket(插座、接口)的翻译,通常表示的是系统提供给程序员实现网络通信的一套接口,为啥封装这些接口呢?因为我们知道,网络通信中有很多的协议, 所以在这套接口中就提供了足够充足的选择。我们通常使用的主要是两个协议的通信程序编写:传输层的TCP和UDP协议。
83 0
|
网络协议 安全
套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
115 0
套接字编程:UDP通信程序编写、套接字接口、字节序转换接口
|
网络协议 Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——第8章 基本UDP套接字编程 8.1概述
在使用TCP编写的应用程序和使用UDP编写的应用程序之间存在一些本质差异,其原因在于这两个传输层之间的差别:UDP是无连接不可靠的数据报协议,非常不同于TCP提供的面向连接的可靠字节流。然而相比TCP,有些场合确实更适合使用UDP,我们将在22.4节探讨这个设计选择。
1455 0
|
JavaScript Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.14 UDP中的外出接口的确定
已连接UDP套接字还可用来确定用于某个特定目的地的外出接口。这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址(假设其进程未曾调用bind显式指派它)。这个本地IP地址通过为目的IP地址搜索路由表得到外出接口,然后选用该接口的主IP地址而选定。
1916 0
|
网络协议 Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.10 UDP程序例子小结
一般来说,客户的IP地址和端口号都由内核自动选择,尽管我们提到过,客户也可以调用bind指定它们。在客户的这两个值由内核选择的情形下我们也提到过,客户的临时端口是在第一次调用sendto时一次性选定,不能改变;然而客户的IP地址却可以随客户发送的每个UDP数据报而变动(假设客户没有捆绑一个具体的IP地址到其套接字上)。
1511 0
|
网络协议 Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——1.3 协议无关性
我们只修改了程序的5行代码,得到的却是另一个与协议相关的程序:这回是与IPv6协议相关的。更好的做法是编写协议无关的程序。图11-11将给出本客户程序的协议无关版本,它使用了getaddrinfo函数(由tcp_connect函数调用)。
1548 0
|
Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.5 UDP回射客户程序:main函数
本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第8章,第8.5节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1402 0
|
网络协议 Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.2 recvfrom和sendto函数
sendto的to参数指向一个含有数据报接收者的协议地址(例如IP地址及端口号)的套接字地址结构,其大小由addrlen参数指定。recvfrom的from参数指向一个将由该函数在返回时填写数据报发送者的协议地址的套接字地址结构,而在该套接字地址结构中填写的字节数则放在addrlen参数所指的整数中返回给调用者。
1384 0

热门文章

最新文章