Python网络编程 Python套接字编程
作者:Lockeyi 发布时间:2022-06-09 09:41:32
标签:Python,网络编程,套接字编程
Python 提供了两个级别访问的网络服务。
低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
什么是 Socket?
Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
socket()函数
Python 中,我们用 socket()函数来创建套接字,语法格式如下:
socket.socket([family[, type[, proto]]])
参数
family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
protocol: 一般不填默认为0.
socket实现服务端与客户端的简单通信(模拟ssh的部分功能以及自动应答)
server端的简单程序示例:
#!/usr/bin/env python
#coding:utf-8
'''
file:server.py
date:9/8/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程服务器端,python3.6.2
'''
import re
import socket,time,os
s = socket.socket() # 创建 socket 对象
host = '127.0.0.1'#socket.gethostname() # 获取本地主机名
port = 9999 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 等待客户端连接
while True:
conn, addr = s.accept() # 建立客户端连接。
print('conneted address:'.decode('utf-8'), addr)#显示连接到服务器的客户端的地址
while True:
data = conn.recv(1024)
#接收到的客户端的请求或者返回
if not data:
#当返回信息为空或者请求为空时断开客户端连接
print('Connection closed!')
break;
data = data.decode('utf-8')
#以下前三个条件都是设置的自动检测应答,最后一个是根据输入的内容进行的命令执行,并将结果返回给客户端
if re.findall(r'who',data):
reply = 'I am lockey'.encode('utf-8')
elif re.findall(r'gender',data):
reply = 'A boy'.encode('utf-8')
elif re.findall(r'age',data):
reply = '23'.encode('utf-8')
else:
print('execute com:',data)
cmd_res = os.popen(data).read()
if not cmd_res:
#对于命令的执行如果没有返回值的话就给客户端发送一条信息
conn.send('No response'.encode('utf-8'))
continue
reply = cmd_res.encode('utf-8')
conn.send(reply)
#将结果发送给客户端
client端的简单实现:
#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/8/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程客户端,python3.6.2
'''
import socket,time # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = '127.0.0.1'#socket.gethostname() # 获取本地主机名
port = 9999 # 设置端口好
s.connect((host, port))
while True:
cmd = input("lockey#")
#用户输入
if len(cmd) == 0:continue
#如果用户未输入内容则继续下一次输入
s.send(cmd.encode('utf-8'))
#将用户输入的内容发送给客户端等待结果
result = s.recv(1024)
if not result:
#如果服务端没有返回结果则继续下一次输入
continue
print(result.decode('utf-8'))
#如果服务端有返回则打印结果
s.close()
#用户终止程序时关闭连接
服务器端运行结果
客户端运行截图
来源:http://blog.csdn.net/Lockey23/article/details/77914222
0
投稿
猜你喜欢
- 本文介绍了四种asp导出excel数据的方法:1.使用OWC ,2.用Excel的Application组件,3.直接在IE中打开,4.导出
- 我想把存在数据库里的每天24小时来访者数另放到一个Excel文件中去,可以吗?可以,其实就是将数据库里面的内容生成一个Excel文件:toe
- 先让我们看一个例子,了解什么是模式化窗口。以下是QQ秀商城在非登录时提示登录的一种状态。当我在非登录状态,通过保存形象的方式买一件衣服时,弹
- 有助于效率的类型选择1、使你的数据尽可能小最基本的优化之一是使你的数据(和索引)在磁盘上(并且在内存中)占据的空间尽可能小。这能给出巨大的改
- Windows 8 终于发布了,虽然现在可用的只是开发者预览版,好消息是,IE 10 也随着发了,虽然现在还只有Windows 8可用。我们
- 根据google最新的算法规则:用户行为模式的重视程度越来越高,这也就要求网页设计的时候应注意“合理的网页结构”,SEO业界也有个共识“网页
- 八卦为先八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:你知道世界上第一份reset.css在哪么?* { m
- 1、某汽车网站地址2、使用firefox查看后发现,此网站的信息未使用json数据,而是简单那的html页面而已3、使用pyquery库中的
- 我很想自己写一个这样的程序,不过wordpress是php的,我blog是ASP的,只好用ASP写代码了。经过一番折腾测试,终于让我的梦想变
- 先把这个script加到你的页面里:http://code.google.com/p/doufu/source/browse/trunk/n
- 在开发和调试基于XML的应用的时候,程序员往往为找不到合适的快速桌面XPATH测试软件发愁。诚然,市面上有成套的XML编辑软件,但是它们往往
- 1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
- 前言使用 Pandas 的between 、cut、qcut 和 value_count离散化数值变量。分箱是一种常见的数据预处理技术有时也
- 在使用ASP来进行后端的数据合法性校验的时候,有些人为满足不同环境下面的数据校验,编写了很多的函数来实现,比如,我们想要校验用户输入的URL
- global 属性返回 Boolean 值,指出正则表达式使用的global 标志 (g) 的状态。默认值为 false。只读。rgExp.
- WordPress 的插件机制实际上只的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒
- 如何定义记录集打开的游标类型和锁定类型?我们知道,打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中就定义了
- asp之家注:asp中FSO组件的功能很强大,如果没有FSO很难想象ASP会变成什么样。对于学习asp编程的朋友一定会接触到FSO相关的操作
- 每次写完的东西就忘了,下次用时还要重查资料重新写,这是今天写的一段测试代码,保留下来,记录给自已,同时分享给大家。目标:把下边的这个上传文件
- SQL Server有两种备份方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志