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脚本设置系统时间的两种方法
Feb 21 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
Python制作exe文件简单流程
Jan 24 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
python实现超市管理系统(后台管理)
Oct 25 Python
python安装gdal的两种方法
Oct 29 Python
如何在python中实现随机选择
Nov 02 Python
python中def是做什么的
Jun 10 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
利用Python实现模拟登录知乎
May 25 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
php cookie 详解使用实例
2016/11/03 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
javascript数组去重小结
2016/03/07 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python psutil库安装教程
2018/03/19 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
CSS3 简写animation
2012/05/10 HTML / CSS
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
预防煤气中毒方案
2014/06/16 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
革命电影观后感
2015/06/18 职场文书
学生会任命书范本
2015/09/21 职场文书
小学中队长竞选稿
2015/11/20 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
浅谈Python魔法方法
2021/06/28 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android
Redis Lua脚本实现ip限流示例
2022/07/15 Redis