python网络编程笔记(一)

news2024/11/18 15:37:19

一:Socket简介

  • 套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同 -台主机上多个应用程序之间的通讯
  • BSD Socket接口是TCP/IP网络的API
  • 在Linux,Unix和Windows均实现这个接口.BSD Socket的是目前开发网络应用主要接口.绝大部分网络应用均可Socket来开发
  • 一个Socket队列是IP应用的基本单位.两个机器通讯相当于两个机器的两个Socket互相通讯的过程
  • Socket 的本意是插座.每一个激活的socket可以看成是一个跟本地某个IP端口绑定的IP包队列
  • 接口设计者最先是将接口放在Unix操作系统里面的。因此一个激活的Socket被设计成特殊的I/O文件, Socket也是一种文件描述符。 .因此操作类似对一个普通文件操作
  • 套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的

基于文件类型的套接字家族
套接字家族的名字: AF_ _UNIX
unix-切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

基于网络类型的套接字家族
套接字家族的名字: AF_ INET
(还有AF_ INET6被用于ipv6,还有一些其他的地址家族, 不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF INET是使用最广泛的-个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_ INET)

二:Socket基本函数

1、创建套接字

socket(socket.AF_INET,socket.SOCK_STREAM)

  • socket.AF_INET:表示是基于网络的套接字家族,因而可以允许在远程 主机之间通信
  • socket.SOCK_STREAM:表示流式模块,基于tcp协议,这样会提供按顺序的,可靠,双向,面向连接的比特流

2、设置端口重用

setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
比如,当我们把程序关闭了,但是操作系统还没有释放端口,再次启动就会报端口被占用的错误,使用setsockopt就解决这种情况

3、绑定

bind((‘127.0.0.1’,8000))
里面一定要是一个tuple类型,绑定ip,端口,ip是部署服务端的ip,如果是127.0.0.1,就表示服务端和客户端要在一台服务器上,端口0-65535,0-1024是操作系统使用,1024后的端口是应用程序使用

4、侦听

listen()
在某个端口上.侦听

5、accept ()

accept () listen侦听后,有客户端进来来调用,如果一直没有客户端来,就会阻塞在这里

6、connect ()

connect((‘127.0.0.1’,8000)) 联接远程某个Socket,里面也要一个tuple类型,ip和端口都填的是服务端的ip和端口
connect函数是客户端用来同服务端连接的

7、发送数据

send(msg.encode(“utf-8”)) 发送数据,需要把字符串转换为bytes

8、接收数据

recv(1024) 接收的数据 ,单位:bytes 这里表示最大接收1024个bytes

Socket 编程模型

  • Socket当前编程模型一般都是C/S结构.即相互通信的网络程序中,一方称为客户程序(client),另一方称为服务程序(server)
  • C/S结构中,客户端向服务器发送请求,服务器作出响应.象常见的浏览器/web服务器,FTP客户端/FTP服务器. 就是典型的C/S结构
  • 一个服务器可以同时接受多个客户端请求
  • 在socket编程中,服务器和客户端的编程流程有一些不同

socket编程的流程图

在这里插入图片描述
服务端流程:创建套接口(socket)→绑定套接口(bind)→设置套接口为监听模式,进入被动接受连接请求状态(listen) →接受请求(accept),建立连接(socket)→读/写数据(recv,send)→终止连接(close)
客户端流程:创建套接口(socket)→与远程服务程序连接(connect)→写/读数据(send/recv)→终止连接 (close)

代码实现

本例子实现是循环接收客户端,只能一个一个连接客户端,还不能并发
1、服务端代码,文件名server.py

#--coding:utf-8--

import socket
'''
socket.AF_INET:表示是基于网络的套接字家族
socket.SOCK_STREAM:表示流式模块,基于tcp协议
'''
#创建套接字
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定ip,端口,ip是部署服务端的ip,如果是127.0.0.1,就表示服务端和客户端要在一台服务器上,端口0-65535,0-1024是操作系统使用,1024后的端口是应用程序使用
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)   #设置端口重用,比如端口已经关闭了但是操作系统还没有释放,会提示端口占用
server.bind(('0.0.0.0',8000))
#监听
server.listen()

print('staring....')
while True:  #连接循环
    conn , addr = server.accept()
    print(addr)

    while True:   #通信循环
        try:
            data = conn.recv(1024)   #1、单位:bytes 2、最大接收1024个bytes
            if not data:break   #适用于linux操作系统,如果客户端断开了连接,如果不处理在linux系统上,客户端断开后服务端就会进入的无限循环
            print('客户端的数据:',data.decode('utf8'))
            conn.send(data.upper())   #服务端接收到客户端的数据后,变成大写再返回给客户端
        except ConnectionResetError:     #适用于windows系统,如果客户端断开连接,在windows系统就会报ConnectionResetError的错误
            break

    conn.close()
server.close()

2、客户端代码,文件名称client.py

import socket

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#发起连接,服务端的ip和端口
client.connect(('127.0.0.1',8000))

while True:
    msg = input(">>: ").strip() #去掉空格
    if not msg:continue      #如果发的是空就进入下一次循环,如果不处理,当客户端发送一个空字符后服务端就会阻塞在recv处
    client.send(msg.encode("utf-8"))   #将字符串转换为bytes
    data = client.recv(1024)
    print(data.decode("utf8"))

client.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcMap发布arcgis sever缓存瓦片服务

1.全能电子地图下载瓦片地图 2.地图拼接 acrgis sever缓存瓦片 下载完成的文件目录 3.arcMap添加数据 连接本地文件 这一步有坑,一定要加载到瓦片最外层目录,否则看不到图层文件。 找到图层数据,点击添加 添加数据完成,开始发布服…

数字化和物联网的发展如何改变我们的生活方式?

数字化和物联网 (IoT) 的发展已经给我们的生活方式带来了重大变化,而且这些变革将在未来继续发生。以下是数字化和物联网影响我们生活的一些方式: 连接设备和智能家居:物联网使日常物品能够连接到互联网并相互通信。这种连通性允许创建智能家…

记录一次oracle报错IMP-00058: 遇到 ORACLE 错误 904 ORA-00904: “xxx“: 标识符无效

错误原因:导入的表中缺少DATASRC字段 解决方法:在要导入的表中加上DATASRC字段

对 React 状态管理的理解及方案对比

1、React 状态、通信 React 为什么需要状态管理 React 特点: 专注 view 层:专注 view 层 的特点决定了它不是一个全能框架,相比 angular 这种全能框架,React 功能较简单,单一。UIrender(data)UIrender(data)&#x…

Keras-深度学习-神经网络-人脸识别模型

目录 模型搭建 模型训练 模型搭建 ①导入所需的库,导入了 Keras 和其他必要的库,用于构建和处理图像数据。 from keras.models import Sequential from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D import os from PIL import Image …

《C++高级编程》读书笔记(十二:利用模板编写泛型代码)

1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 1. 模板概述 模板将参数化的概念推进了一步,不仅允许…

用Python搭建监控平台详解

概要 监控和运维,是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控,我们能够及时了解到企业网络的运行状态。一旦出现安全隐患,你就可以及时预警,或者是以其他方式通知运维人员,让运维监控人员有时…

oracle 自定义类型(type)的用法

emp表数据如下所示 定义object类型 create or replace type typeof_userinfo_row as object(user_id varchar2(50),user_name varchar2(50) )创建函数并将此类型作为返回值类型 create or replace function FUN_TEST return typeof_userinfo_row isFunctionResult typeof_use…

互联网业务全球化互通组网

随着互联网业务的快速发展,越来越多的企业开始全球化扩张业务,并需要在全球范围内建立互联网组网以实现业务数据的高效传输。在这个过程中,如何建立高效、稳定的全球互联网组网方案,是每个企业都需要考虑的问题。 一种可行的方案…

springboot 上传文件

在Spring Boot中,可以使用RequestParam注解来接收文件。 在你的控制器方法中,使用RequestParam注解来声明一个MultipartFile类型的参数来接收上传的文件 MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制…

【C语言操作符优先级】

C语言操作符优先级 C语言操作符1、操作符的优先级序表2、操作符的属性2.1、操作符优先级运算例程12.2、操作符优先级运算例程2 C语言操作符 前言: (1)在我们熟悉的数学加减乘除运算中,都知道先乘除再加减,有括号的先算…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是:没有找到webpack模块。 就算之前你装了webpack,那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

数据库管理-第八十六期 19c OCM之路-第一堂(01)(20230628)

数据库管理 2023-06-28 第八十六期 19c OCM之路-第一堂(01)1 环境补充说明2 第一堂-01考点1:Create a pluggable database 创建PDB考点2:Create tablespace 创建表空间考点3:Managing undo 管理undo 总结 第八十六期 1…

【无名管道】无名管道(Pipe)与进程通信:快速上手

目录 0. 管道概述: 1. 管道特点 2. 管道创建:pipe函数 3. 管道的读写特点 4. 通过fcntl函数设置文件的阻塞特性 5. 查看管道缓冲区命令 总结: 0. 管道概述: 管道也叫无名管道,它是是 UNIX 系统 IPC(…

019、数据库管理之备份恢复管理(BR)

备份的重要性 数据库恢复审计和分析典型DBA任务 备份的类型 热备,允许应用程序完全访问数据。冷备,不允许应用程序访问年数据温备,允许应用程序读取,但不能修改 热备份 热备份是在读取和修改数据时进行的,几乎不会…

怎么高效批量调整视频的尺寸大小

大家平时在剪辑视频的过程中,是否会遇到视频尺寸大小不合适的情况,当我们遇到这种情况时,如何才能快速批量地解决呢?有没有什么方法可以快速批量修改视频尺寸大小呢?跟着小编一起来看看我平时批量修改视频尺寸的方法。…

联邦学习的架构思想

目录 联邦学习介绍(非常详细) 联邦学习的由来 联邦学习的发展历程 1) 机器学习 2) 分布式机器学习 3) 隐私保护技术 4) 联邦学习 联邦学习的规范与标准 联邦学习的架构思想 联邦学习的社区与生态 联邦学习介绍(非常详细&#xff09…

Lenovo联想笔记本电脑 小新 Air-14 2020 Intel平台IIL版(81YJ)原装Win10系统恢复原厂OEM预装专用系统

Lenovo联想笔记本电脑,小新 Air-14 2020 Intel平台IIL版(81YJ)出厂Windows10系统原装系统镜像,恢复原厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式&#xff1…

基于微信小程序的上课签到系统(数据库+报告+文档+演示视频)

系统技术语言介绍: 本系统采用了SSM (Spring Spring MVC Mybatis)架构, MySQL作为基础数据库,微信开发工具作为前端基础,前端采用了 wxml的设计语言,Idea作为后台的开发工具。 功能列表: 1.…

从数字图像到音视频学习:我的学习之旅

数字图像是一门广泛应用于计算机视觉、图像处理和计算机图形学等领域的学科,而音视频学习则涵盖了音频和视频的处理、分析和应用。 如果你最开始接触数字图像,可能会学习一些基本概念,例如像素、分辨率、色彩空间和图像处理算法等。这可能涉…