c语言之Linux网络开发

一、网络编程预备知识 socket IP地址 端口号 字节序 (一)socket 是一个编程接口 是一种特殊的文件描述符 (everything in Unix is a file) 并不仅限于TCP/IP协议 面向连接 (Transmission Control Protocol - TCP/IP) 无连接 (User Datagram Protocol -UDP 和 Inter-network Packet Exchange - IPX) (二)socket类型 1、流式套接字(SOCK_STREAM) 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 2、数据报套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。 3、原始套接字(SOCK_RAW) 可以对较低层次协议如IP、ICMP直接访问。 (三)socket的位置 (四)IP地址 IP地址是Internet中主机的标识: Internet中的主机要与别的机器通信必须具有一个IP地址 IP地址为32位(IPv4)或者128位(IPv6) 每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由 表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个32位的无符号整数 (五)端口号 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别 TCP端口号与UDP端口号独立 端口号一般由IANA (Internet Assigned Numbers Authority) 管理 众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用) 注册端口:1024~49150 动态或私有端口:49151~65535 (六)字节序 不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO): 小端序(little-endian) - 低序字节存储在低地址 将低字节存储在起始地址,称为“Little-Endi...

Python虚拟环境搭建的必要性

 一、什么是全局环境

       很多朋友在学习Python时直接就去 官网下载安装包然后进行安装Python,接着你可能就会在DOS窗口通过Python命令:

C:\Users\shenjianping>python Python 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 Warning: This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.io/activation Type "help", "copyright", "credits" or "license" for more information. >>>

OK大功告成,貌似没有什么问题,然而却为后续的开发埋下诸多隐患和弊端。

       上面的环境你可以理解成在全局环境安装Python,那么假如现在你在全局环境下开发两个项目,分别是p1和p2:

         从图中可以很清楚的看到在全局环境下同时开发p1和p2项目,它们都依赖django第三方库,但是版本不同,同一个环境下只能有一个版本会被保留下来,另一个版本会自动卸载掉。难道在2个项目同时紧急时,你的老板会允许你一个一个的搞吗?
那么我们再来想一个场景,如果p1依赖的requests包,而p2不需要,请问如果p1已经完成了,p2还要这个包干什么,这不就是显然的环境臃肿吗?
最后,如果打包上线导出项目依赖,可能大部分都是上个项目遗留下来一堆没用的依赖包,这又如何解决呢?
凡此种种,都让我们寻求一种开发和部署环境解决方案。虚拟环境必不可少:

二、什么是虚拟环境

         你可以简单的理解就是在一个大的房子里面有很多独立的小房子,它们有着自己独立的空间,之间互不影响,可以用如下的图简单说明一下:

        从上面可以看到的就是将p1、p2、全局环境都隔离开来了,这样它们谁都不影响,我们将在全局环境中创建的一个个小的环境就称为虚拟环境,如p1、p2项目所呆的环境。
         这三个环境都可以拥有自己不同版本的Python解释器,不同的依赖包、不同版本的同种依赖包,而且在上线项目时只需要导出本项目自己虚拟环境的依赖包即可。是不是一种很巧妙方式呢?

三、总结

本篇文章探讨了为什么需要虚拟环境,从以下几个方面进行了说明:

  • 全局环境无法配置不同版本的同一个依赖包
  • 全局环境随着项目的增多会造成环境的臃肿与污染
  • 上线项目中环境依赖包导出大量无用的包
基于以上种种,我们采取虚拟环境来解决,上面就是其解决方案。

更多文章合集前往: 往期精彩文章

此博客中的热门博文

玩转虚拟机系列之如何搭建虚拟机

玩转虚拟机系列之远程工具

玩转虚拟机系列之如何高效创建虚拟机