1 socketserver实现并发

基于tcp的套接字,关键是两个循环,一个通信循环,一个链接循环

Socketserver的 模块中分成两类:

Server类(解决连接问题)

Request类(解决通信问题)

server类:

request类:

继承关系:

#服务端
import socketserver
class FTPserver(socketserver.BaseRequestHandler):
#定义一个类,继承socketserver.BaseRequestHandler
#通讯
def handle(self):#规定一个handle 规定死的
print(self.request)#客户端的连接信息
while True:#通信循环
data=self.request.recv(1024)
print(data)
self.request.send(data.upper())
if __name__ == '__main__':
obj=socketserver.ThreadingTCPServer(("127.0.0.1",8080),FTPserver)#基于多线程实现并发
#产生一个对象
obj.serve_forever()#连接循环 #客户端
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(("127.0.0.1",8080))
while True:
msg=input(">>")
if not msg:continue
phone.send(msg.encode("utf8"))
data=phone.recv(1024)
print(data)
>>
<socket.socket fd=476, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 56456)>
<socket.socket fd=408, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 56457)>
<socket.socket fd=436, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 56461)>
b'111'
b'2'
b'22'

2套接字工作流程(udp)

UDP:用户数据报协议

是无连接的

面向消息的

不会产生粘包

Udp是不可靠传输

#服务端
import socket
udpserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udpserver.bind(("127.0.0.1",8080))
#udp没有链接,不用listen,accpect
while True:#通讯循环
data,client_addr=udpserver.recvfrom(1024)
print(data)
print(client_addr)
msg=input(">>")
udpserver.sendto(msg,client_addr) #客户端
import socket
udpclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=(("127.0.0.1",8080))
while True:
inp=input(">>")
udpclient.sendto(inp.encode("utf8"),ip_port) data,server_addr=udpclient.recvfrom(1024)
print(data.decode("utf8")) udp的socketserver并发
#服务端
import socketserver
class FtpServer(socketserver.BaseRequestHandler):
def handle(self):
print(self.request[0])
print(self.request[1])
self.request[1].sendto('嘎嘎嘎'.encode('utf-8'),self.client_address) if __name__ == '__main__':
obj=socketserver.ThreadingUDPServer(('127.0.0.1',8080),FtpServer)
obj.serve_forever()
#客户端
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080)) while True: #通信循环
msg=input('>>: ').strip()
if not msg:continue
phone.send(msg.encode('utf-8'))
# print('has send===========>')
data=phone.recv(1024)
# print('has recv===========>')
print(data) phone.close()

  

python之socket编程4的更多相关文章

  1. 转:Python 的 Socket 编程教程

    这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...

  2. Python 3 socket 编程

    Python 3 socket编程 一 客户端/服务器架构 互联网中处处是C/S架构 1.C/S结构,即Client/Server(客户端/服务器)结构 2.在互联网中处处可见c/s架构 比如说浏览器 ...

  3. 最基础的Python的socket编程入门教程

    最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...

  4. python之socket编程(一)

    socket之前我们先来熟悉回忆几个知识点. OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标 ...

  5. Python:socket编程教程

    ocket是基于C/S架构的,也就是说进行socket网络编程,通常需要编写两个py文件,一个服务端,一个客户端. 首先,导入Python中的socket模块: import socket Pytho ...

  6. python学习------socket编程

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  7. Python基础socket编程

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  8. Python基础-socket编程

    一.网络编程 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的 ...

  9. Python菜鸟之路:Python基础-Socket编程-2

    在上节socket编程中,我们介绍了一些TCP/IP方面的必备知识,以及如何通过Python实现一个简单的socket服务端和客户端,并用它来解决“粘包”的问题.本章介绍网络编程中的几个概念:多线程. ...

  10. Python 006- python socket编程详细介绍

    转自https://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供 ...

随机推荐

  1. [转] 合理使用npm version与npm dist-tag详解

    第一步:发布第一个稳定版本 npm publish//1.0.0 第二步:修改文件继续发布第二个版本 git add -A && git commit -m "c" ...

  2. codeforces 1037

    题解: E-trips 哎哎哎好傻逼啊 没有想到算不能的一直在想怎么算能的 太傻逼了 其实很简单 我们只需要对好友<=k的首先dfs一下给他连接着的朋友-1 然后如果小于了就递归下去 这个正确性 ...

  3. Python_socketserver

    socketserver ----->> 服务器端的开发 socketserver:   实现服务器端同时处理多个请求 通过两个主要的类来处理网络请求: 服务类 请求处理类 一.服务类 1 ...

  4. excel追加数据

    原本是想通过读取已存在的文件的行然后直接添加保存,发现结果会被覆盖. 后来查找方法发现需要复制原表. 函数参数: list:要添加的数据 filename:目标文件 sheet_index:默认表的第 ...

  5. Linux拷贝U盘文件(命令行)

    Linux系统有的有界面,有的没有只要命令窗口,因此导入外部文件就变得困难,没有可视化的方便. 这里通过挂载u盘进行文件拷贝. 首先挂载u盘:这里以centos为例 1.进入命令行模式下,输入命令 s ...

  6. k8s教程

    k8s教程地址 安装https://github.com/gjmzj/kubeaszhttps://github.com/opsnull/follow-me-install-kubernetes-cl ...

  7. Spring(一)Spring介绍

    Spring是一个开源框架. Spring是一个分层的JavaSE/EE 一站式轻量级框架. Spring在JavaEE三层架构中,每一层都提供不同的解决技术. -Web层:SpringMVC. -S ...

  8. Maya cmds pymel 获取安装选择顺序选择的物体

    Maya cmds pymel 获取安装选择顺序选择的物体 import maya.cmds as cmds 先设置选择顺序 cmds.selectPref(trackSelectionOrder = ...

  9. js里面的判断最好做到完全控制

    <li class="item"> <div id="zcdz" name="zcdz" class="mini ...

  10. Python 解决 :NameError: name 'reload' is not defined 问题

    对于 Python 2.X: import sys reload(sys) sys.setdefaultencoding("utf-8") 1 2 3 对于 <= Pytho ...