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中的Classes和Metaclasses详解
Apr 02 Python
Python网络爬虫实例讲解
Apr 28 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
使用Python读取大文件的方法
Feb 11 Python
python os.path模块常用方法实例详解
Sep 16 Python
python脚本开机自启的实现方法
Jun 28 Python
Python Django 前后端分离 API的方法
Aug 28 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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版(2)
2006/10/09 PHP
动态新闻发布的实现及其技巧
2006/10/09 PHP
基于mysql的论坛(3)
2006/10/09 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
理解Python中的绝对路径和相对路径
2017/08/30 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
学习python需要有编程基础吗
2020/06/02 Python
Python 如何展开嵌套的序列
2020/08/01 Python
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
Bonprix法国:时尚、鞋子、家居
2020/12/29 全球购物
企划主管岗位职责
2013/12/12 职场文书
2014年三万活动总结
2014/04/26 职场文书
租房安全协议书
2014/08/20 职场文书
大学军训心得体会800字
2016/01/11 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android