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 相关文章推荐
使用pycharm生成代码模板的实例
May 23 Python
python实现抖音视频批量下载
Jun 20 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
Python requests模块实例用法
Feb 11 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
flask框架路由常用定义方式总结
2019/07/23 Python
Python 获取项目根路径的代码
2019/09/27 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
新闻编辑自荐信
2013/11/03 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
市级文明单位申报材料
2014/05/07 职场文书
投标授权委托书范文
2014/08/02 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python