Python网络编程 Python套接字编程


Posted in Python onSeptember 13, 2017

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()
#用户终止程序时关闭连接

服务器端运行结果

Python网络编程 Python套接字编程

客户端运行截图

Python网络编程 Python套接字编程

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python从入门到精通(DAY 3)
Dec 20 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
python 使用值来排序一个字典的方法
Nov 16 Python
python+os根据文件名自动生成文本
Mar 21 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
Python 实现微信自动回复的方法
Sep 11 Python
python和ruby,我选谁?
Sep 13 #Python
python实现简单点对点(p2p)聊天
Sep 13 #Python
django 常用orm操作详解
Sep 13 #Python
Python三级菜单的实例
Sep 13 #Python
基于Python代码编辑器的选用(详解)
Sep 13 #Python
python多线程socket编程之多客户端接入
Sep 12 #Python
python数据结构之链表详解
Sep 12 #Python
You might like
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python实现分段线性插值
2018/12/17 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
一行python实现树形结构的方法
2019/08/09 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
详解Python IO编程
2020/07/24 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
白酒业务员岗位职责
2013/12/27 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
2015元旦标语横幅
2014/12/09 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
Springboot中如何自动转JSON输出
2022/06/16 Java/Android
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技