python基础学习19----socket网络编程

P协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

物理端口:网卡口

逻辑端口:我们指的就是逻辑端口

    A:每个网络程序都会至少有一个逻辑端口

    B:用于标识进程的逻辑地址,不同进程的标识

    C:有效端口:0~65535,其中0~1024系统使用或保留端口。

方法

socket.socket(socket.AF_INET,socket.soCK_STREAM,0)

参数一:地址簇

  socket.AF_INET IPv4(认)  socket.AF_INET6 IPv6

  socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

参数二:类型

  socket.soCK_STREAM  流式socket,for TCP (认)  socket.soCK_DGRAM   数据报式socket,for UDP

参数三:协议

  0  (认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议

sk.bind(address)s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。

sk.listen(backlog)  开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。 backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5 这个值不能无限大,因为要在内核中维护连接队列

  是否阻塞(认True),如果设置False,那么accept和recv时一旦无数据,则报错。

  接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。  接收TCP 客户的连接(阻塞式)等待连接的到来  连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误  同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061  关闭套接  接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。  与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。sk.send(string[,flag])  将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。sk.sendall(string[,flag])  将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。 内部通过递归调用send,将所有内容发送出去。sk.sendto(string[,flag],address)  将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议。sk.settimeout(timeout)  设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )sk.getpeername()  返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。sk.getsockname()  返回套接字自己的地址。通常是一个元组(ipaddr,port)sk.fileno()  套接字的文件描述符

2.应用

这张图很好的展示了利用socket进行客户端与服务器端的信息交流。

接下来是一个很简单的服务端与客户端通信的例子

服务器端

Highlighter">
rush:python;gutter:true;">import socket

sk=socket.socket(socket.AF_INET,0)
address=("127.0.0.1",9000)
sk.bind(address)
sk.listen(5)

conn,address=sk.accept()
conn.sendall(bytes("hello world","utf8"))

sk.close()

客户端

Highlighter">
rush:python;gutter:true;">import socket
sk=socket.socket()
address=("127.0.0.1",9000)
sk.connect(address)

ret=str(sk.recv(1024),"utf8")
print(ret)

  

内容封装到其中,简化了编写任务,而且还能实现多线程通信

Highlighter">
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
while 1:

        while 1:
            try:
                data = self.request.recv(1024)
            except Exception:
                break
            data=str(data,"utf8")
            print(data)
            if data=="exit":
                break
            data2=input(">>>")
            self.request.sendall(bytes(data2,"utf8"))
        self.request.close()

if name=="main":
server = socketserver.ThreadingTcpserver(("127.0.0.1",9001),MyServer)
server.serve_forever()

客户端

Highlighter">
while 1:
data=input(">>>")
sk.sendall(bytes(data,"utf8"))
if data=="exit":
break
data2=sk.recv(1024)
print(str(data2,"utf8"))

sk.close()

上面是一个简易的多线程聊天程序,服务端与使用socket有了些变化,

socketserver的使用方法

  1. 创建一个请求处理的类,并且这个类要继承 BaseRequestHandler   class ,并且还要重写父类里handle()方法
  2. 你必须实例化 Tcpserver,并且传递server IP和你上面创建的请求处理类,给这个Tcpserver;
  3. server.handle_requese()#只处理一个请求,server.server_forever()处理多个一个请求,永远执行
  4. 关闭连接server_close()
上述代码中ThreadingTcpserver使用了多线程的方法,handle方法是自己写的具体处理方法,会在server.server_forever()中调用
简单的使用方法就像上边的代码一样的格式,只是handle中的不同,若要是使用udp传输或者要改变其他的内容,可以通过查看socketserver源代码,根据情况创建不同的Server实例,使用不同的方法

  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实