python3实现TCP协议的简单服务器和客户端案例(分享)


Posted in Python onJune 14, 2017

利用python3来实现TCP协议,和UDP类似。UDP应用于及时通信,而TCP协议用来传送文件、命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱。下面代码就是模拟客户端通过命令行操作服务器。客户端输入命令,服务器执行并且返回结果。

TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP客户端

from socket import *

host = '192.168.48.128'
port = 13141
addr = (host,port)
bufsize=1024

tcpClient = socket(AF_INET,SOCK_STREAM) # 这里的参数和UDP不一样。
tcpClient.connect(addr) #由于tcp三次握手机制,需要先连接

while True:
  data = input('>>> ').encode(encoding="utf-8")
  if not data:
    break
  # 数据收发和UDP基本一致
  tcpClient.send(data) 
  data = tcpClient.recv(bufsize).decode(encoding="utf-8") 
  print(data)

tcpClient.close()

TCP客户端

from socket import *
from time import ctime
import os 

host = ''
port = 13140
bufsize = 1024
addr = (host,port)

tcpServer = socket(AF_INET,SOCK_STREAM)
tcpServer.bind(addr)
tcpServer.listen(5) #这里设置监听数为5(默认值),有点类似多线程。

while True:
  print('Waiting for connection...')
  tcpClient,addr = tcpServer.accept() #拿到5个中一个监听的tcp对象和地址
  print('[+]...connected from:',addr)

  while True:
    cmd = tcpClient.recv(bufsize).decode(encoding="utf-8") 
    print('  [-]cmd:',cmd)
    if not cmd:
      break
    ###这里在cmd中执行来自客户端的命令,并且将结果返回###
    cmd = os.popen(cmd) ###os.popen(cmd)对象是file对象子类,所以可以file的方法
    cmdResult = cmd.read()
    cmdStatus = cmd.close()
    #################################################
    data = cmdResult if (not cmdStatus) else "ERROR COMMAND"
    tcpClient.send(data.encode(encoding="utf-8"))

  tcpClient.close() #
  print(addr,'End')
tcpServer.close() #两次关闭,第一次是tcp对象,第二次是tcp服务器

以上这篇python3实现TCP协议的简单服务器和客户端案例(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python线程池的实现实例
Nov 18 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
python处理html转义字符的方法详解
Jul 01 Python
python验证码识别的示例代码
Sep 21 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
Python之re操作方法(详解)
Jun 14 #Python
Python之py2exe打包工具详解
Jun 14 #Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 #Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 #Python
Python实现的下载网页源码功能示例
Jun 13 #Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 #Python
老生常谈python之鸭子类和多态
Jun 13 #Python
You might like
星际争霸中的热键
2020/03/04 星际争霸
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
Python numpy实现二维数组和一维数组拼接的方法
2018/06/05 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
如何写出好的Java代码
2014/04/25 面试题
专科毕业生求职简历的自我评价
2013/10/12 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
小学一年级评语大全
2014/04/22 职场文书
财务管理专业自荐书
2014/09/02 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
班主任寄语2016
2015/12/04 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL