# PythonNetworkProgramming **Repository Path**: xiaobai_long/PythonNetworkProgramming ## Basic Information - **Project Name**: PythonNetworkProgramming - **Description**: Python网络编程-Socket - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-01 - **Last Updated**: 2023-02-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, Socket ## README # PythonNetworkProgramming ### 介绍 #### 阿里云开发者社区-Python网络编程: * 教程地址:https://developer.aliyun.com/learning/course/602/ * Socket基本原理 * TCPServer简单实现流程 * TCP群聊服务端实现 * 练习一:群聊程序 * 练习二:使用makefile改写群聊类 #### 环境: * 环境:Mac + Python3.8 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 #### 项目介绍 * Socket基本原理: ```内容介绍: 一、Socket 介绍 二、Socket 类型 一、Socket 介绍 (1)Socket 套接字: 1. Python 中提供 socket.py 标准库,非常底层的接口库。 2. Socket是一种通用的网络编程接口,和网络层次没有——对应的关系。 协议族: AF 表示 AddressFamily,用于 socket()第一个参数。 Socket (计算机专业术语): 1. 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。 2. 建立网络通信连接至少要一对端口号(socket)。socket 本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做 网络开发所用的接口,这就是 Socket 编程接口; HTTP 是轿车,提供了封装或者显示数据的具体形式; Socket 是发动机,提供了网络通信 的能力。 3. Socket 的英文原义是"孔"或"插座"。作为 BSDUNIX 的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是 一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在 Internet 上的主机一般运行了多个服务软件,同时提供几种服务。 每种服务都打开一个 Socket ,并绑定到一个端口上,不同的端口对应于不同的服务。 4.Socket 正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,有的 提供110伏交流电,有的则提供有线电视节目。客户软件将插头插到不同编号的插座,就可以得到不同的服务。 ``` ![img_1.png](img_1.png) ``` 二、Socket 类型 ``` ![](img_2.png) ![](img_3.png) * TCPServer简单实现流程 ``` In [2]: import socket In [3]: server = socket.socket() # 绑定ip、端口 In [4]: server.bind(('0.0.0.0', 9999)) # 监听套接字上的连接 In [5]: server.listen() # 需搭配 TCP/UDP socket 调试工具 使用(app store 或百度下载) # 从连接请求队列中取出一个客户的连接请求,然后创建与客户连接的Socket对象,并将它返回。 # 如果队列中没有连接请求,accept()方法就会一直等待,直到接收到了连接请求才返回。 In [6]: s1, ip = server.accept() In [7]: s1 Out[7]: In [8]: ip Out[8]: ('192.168.2.108', 54772) In [9]: s2, ip2 = server.accept() # #连接成功,收数据 In [16]: data = s1.recv(1024) In [17]: data Out[17]: b'Baidu' In [18]: s1, ip = server.accept() # 连接成功,发数据 In [21]: s1.send(b'abc') Out[21]: 3 In [23]: s1.close() In [24]: server.close() ``` * TCP 群聊服务端实现 ``` 一、TCP 编程: Socket 编程,需要两端,一般来说需要一个服务端、一个客户端,服务端称为Server ,客户端称为 Client。 二、TCP 服务端 (1)服务器端编程步骤 ● 创建 Socket 对象 ● 绑定 IP 地址 Address 和端口 Port.bind()方法,IPv4 地址为一个二元组(('IP地址字符串', Port)。 ● 开始监听,将在指定的IP的端口上监听。 listen() 方法。 ● 获取用于传送数据的 Socket 对象。 socket.accept()->(socket object, address info) accept方法阻塞等待客户端建立连接,返回一个新的 Socket 对象和客户端地址的二元组地址是远程客户端的地址,IPv4 中它是一个二元组(clientaddr, port)。 ● 接收数据 recv(bufsize【, flags使用缓冲区接收数据。 ● 发送数据 send((bytes)发送数据。 ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)