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操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
Python中with及contextlib的用法详解
Jun 08 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
simplehtmldom Doc api帮助文档
2012/03/26 PHP
php实现单链表的实例代码
2013/03/22 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
PHP异常处理Exception类
2015/12/11 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
python多线程操作实例
2014/11/21 Python
浅谈django中的认证与登录
2016/10/31 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
商业活动邀请函
2014/02/04 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
关于保护环境的建议书
2014/05/13 职场文书
霸气队列口号
2014/06/18 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
优秀教师单行材料
2014/12/16 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
百日宴上的祝酒词
2015/08/10 职场文书