200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python网络通信模块_python-基于UDP通信的套接字 socketserver模块的使用

python网络通信模块_python-基于UDP通信的套接字 socketserver模块的使用

时间:2021-11-10 07:43:31

相关推荐

python网络通信模块_python-基于UDP通信的套接字 socketserver模块的使用

一、基于UDP协议通信的套接字

udp是没有链接的,所以先启动哪一端都不会报错

import socket

server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

server.bind(('127.0.0.1',8082))

while True:

data,client_addr=server.recvfrom(1024)

print(data)

server.sendto(data.upper(),client_addr)

server.close()

server

import socket

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

while True:

msg=input('>>: ').strip()

client.sendto(msg.encode('utf-8'),('127.0.0.1',8082))

data,server_addr=client.recvfrom(1024)

print(data)

client

由于udp无连接,所以可以同时多个客户端去跟服务端通信(实现简单的并发,并不可靠)

import socket

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

while True:

msg=input('>>: ').strip()

client.sendto(msg.encode('utf-8'),('127.0.0.1',8082))

data,server_addr=client.recvfrom(1024)

print(data)

client2

udp不会出现粘包现象,因为每个中就已经有了报头,这样对于接收端来说,容易区分处理。

udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendinto(y),收完了x个字节的数据就算完成,若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠

二、socketserver模块

socketserver模块简化了编写网络服务程序的任务,是python标准库中很多服务器框架的基础。

socketserver中包含了两种类,一种为服务类(server class),一种为请求处理类(request handle class),前者主要做的是建立链接的过程,后者注重用户数据的处理

要实现一项服务,还必须派生一个handler class请求处理类,并重写父类的handle()方法。handle方法就是用来专门是处理请求的。该模块是通过服务类和请求处理类组合来处理请求的。SocketServer模块提供的请求处理类有BaseRequestHandler。

1.基于tcp协议通信

# 服务端必须满足至少三点:

# 1. 绑定一个固定的ip和port

# 2. 一直对外提供服务,稳定运行

# 3. 能够支持并发

import socketserver

# 自定义类用来处理通信循环

class MyTCPhanler(socketserver.BaseRequestHandler):

def handle(self):

while True:

try:

data = self.request.recv(1024)

if len(data) == 0: break # 针对linux系统

print('-->收到客户端的消息: ', data)

self.request.send(data.upper())

except ConnectionResetError:

break

self.request.close()

if __name__ == '__main__':

server=socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyTCPhanler)

server.serve_forever() # 链接循环

server

from socket import *

client = socket(AF_INET, SOCK_STREAM)

client.connect(('127.0.0.1', 8081))

# 通信循环

while True:

# msg=input('>>: ').strip() #msg=''

# if len(msg) == 0:continue

# client.send(msg.encode('utf-8')) #client.send(b'')

client.send('hello'.encode('utf-8')) #client.send(b'')

# print('has send')

data=client.recv(1024)

# print('has recv')

print(data)

client.close()

client1

from socket import *

client = socket(AF_INET, SOCK_STREAM)

client.connect(('127.0.0.1', 8081))

# 通信循环

while True:

# msg=input('>>: ').strip() #msg=''

# if len(msg) == 0:continue

# client.send(msg.encode('utf-8')) #client.send(b'')

client.send('hello'.encode('utf-8')) #client.send(b'')

# print('has send')

data=client.recv(1024)

# print('has recv')

print(data)

client.close()

client2

2.基于udp协议通信

import socketserver

class MyUdphandler(socketserver.BaseRequestHandler):

def handle(self):

data,sock=self.request

sock.sendto(data.upper(),self.client_address)

if __name__ == '__main__':

server=socketserver.ThreadingUDPServer(('127.0.0.1',8081),MyUdphandler)

server.serve_forever()

server

from socket import *

client=socket(AF_INET,SOCK_DGRAM)

while True:

client.sendto(b'hello',('127.0.0.1',8081))

data,server_addr=client.recvfrom(1024)

print(data)

client1

from socket import *

client=socket(AF_INET,SOCK_DGRAM)

while True:

client.sendto(b'hello',('127.0.0.1',8081))

data,server_addr=client.recvfrom(1024)

print(data)

client2

网络编程(基于udp协议的套接字/socketserver模块/进程简介)

一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

基于udp协议的套接字,socketserver模块,多道技术,进程理论

进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...

python 之 网络编程(基于UDP协议的套接字通信)

8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

网络编程基础:粘包现象、基于UDP协议的套接字

粘包现象: 如上篇博客中最后的示例,客户端有个 phone.recv() , 当服务端发送给客户端的数据大于1024个字节时, 多于1024的数据就会残留在管道中,下次客户端再给服务端发命令时 ...

网络编程(四)--基于udp协议的套接字、socketserver模块

一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头 ...

网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

网络编程[第二篇]基于udp协议的套接字编程

udp协议下的套接字编程 一.udp是无链接的 不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...

网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

基于udp协议的套接字及udp协议粘包问题

udp协议的套接字 udp协议传输 服务端和客户端没有建立连接一说. import socket # 总结一下基础工作流程:服务端生成套接字并绑定ip_port,进入数据传输循环,服务端接受客户端发 ...

随机推荐

解决问题:由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。

WindowServer服务器,添加角色安装完.netframework和iis之后,运行aspx页面就报如下错误: HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法 ...

开发者讨厌你API的十个原因

PS:原文是PDF(E文),原书名称:10ReasonsWhyDevelopersHateYourAPI 1.文档的吸引力太弱 解决之道 采用大图片:示例站点 文档清晰度:示例站点 文档易于查找:示例 ...

把excel中的数据导入到数据库

import.php <?php header("Content-Type:text/html;charset=utf-8"); echo ' &lt ...

Android中SurfaceView的使用详解

Android中SurfaceView的使用详解 /listening_music/article/details/6860786 Android NDK开发 ...

win7 snmp

/uid-21857285-id-3340206.html

jQuery第六章

jQuery与Ajax应用 一.Ajax的优势和不足 1.Ajax的优势: (1)不需要插件支持:不需要任何浏览器插件就可以被绝大多数浏览器支持 (2)优秀的用户体验:能在不刷新整个页面的前提下更新数 ...

常用JS对象的方法总结

String 方法 描述 charAt() 返回在指定位置的字符. charCodeAt() 返回在指定的位置的字符的 Unicode 编码. concat() 连接字符串. indexOf() 检索 ...

SpringAOP深入学习

----------------------Spring AOP介绍------------------ 1.编程范式概念 面向过程编程:C 面向对象编程:c++,Java 函数式编程 事件驱动编程: ...

118A

#include #include #include using namespace std; int m ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。