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自动化测试之连接几组测试包实例
Sep 28 Python
Python中的面向对象编程详解(上)
Apr 13 Python
Python实现的数据结构与算法之双端队列详解
Apr 22 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
用python写测试数据文件过程解析
Sep 25 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
python装饰器原理与用法深入详解
Dec 19 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
关于Python中进度条的六个实用技巧分享
Apr 05 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开发环境
2015/07/28 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
永不消失的title提示代码
2007/02/15 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
Express的路由详解
2015/12/10 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
js省市区级联查询(插件版&无插件版)
2017/03/21 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
python利用datetime模块计算时间差
2015/08/04 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
django教程如何自学
2020/07/31 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
资料员的岗位职责
2013/11/20 职场文书
岗位安全生产责任书
2014/07/28 职场文书
收款授权委托书
2014/10/02 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript