python 基于TCP协议的套接字编程详解


Posted in Python onJune 29, 2019

基于TCP协议的套接字编程

实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件

# 服务端
import socket
# 1. 符合TCP协议的手机
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # TCP
# 2. 绑定手机号 一个服务器,我们自己的电脑作为服务器的话,用自己的IP地址
server.bind(('127.0.0.1',8000)) # 127.0.0.1 代表本地
# server.bind(('192.168.11.251',8000)) 
server.listen(5) # 半连接池 可以同时接收5个客户端
# 3. 等待客户端连接
print('start...')
# 链接循环
while True:
# 通信循环
conn,client_addr = server.accept()
while True:
try:
# 4. 收到信息 receive
data = conn.recv(1024) # 每次接收多少字节,如果改为10,客户端输入dir,(可以在cmd中输入 dir,看看会得到什么) ,会出现什么情况呢,下次的博客会讲到粘包问题,以及如何处理粘包问题
print(data)
# 5. 回消息
conn.send(data.upper())
except ConnectionAbortedError:
continue
except ConnectionResetError:
break
# 客户端1
import socket
# 1. 创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2. 拨号
client.connect(('127.0.0.1',8000))
while True:
msg = input('please enter your msg') # dir
# 3. 发送消息
client.send(msg.encode('utf8'))
# 4. 接收消息
data = client.recv(1024)
print(data)
# 客户端2
import socket
# 1. 创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2. 拨号
client.connect(('127.0.0.1',8000))
# msg = input('please enter your msg>>>')
# 3. 发送消息
client.send('hello'.encode('utf8'))
client.send('world'.encode('utf8'))
# 4. 接收信息
data = client.recv(1024)
print(data)

模拟ssh远程执行命令(linux系统)

# ssh服务端
import socket
import subprocess
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('192.168.11.251',8000)) # 这是我的机子,客户端可以是其他人的机子
server.listen(5)
print('start...')
while True:
conn,cient_addr = server.accept()
print(client_addr) # 打印出的是其他人机子的IP
while True:
try:
cmd = conn.recv(1024) # dir
print(cmd)
# 帮你执行cmd命令,然后把执行结果保存到管道里
pipeline = subprocess.Popen(cmd.decode('utf8'),
shell = True,
stderr = subprocess.PIPE, # std 标准
stdout = subprocess.PIPE)
stderr = pipeline.stderr.read()
stdout = pipeline.stdout.read()
conn.send(stderr)
conn.send(stdout)
except ConnectionResetError:
break
# ssh客户端
import socket
# 1.创建符合TCP协议的手机
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2. 拨号
client.connect(('192.168.11.210',8000))
while True:
msg = input('please enter your msg') # dir
# 3. 发送消息
client.send(msg.encode('utf8'))
# 4. 接收消息
data = client.recv(10)
print(data.decode('gbk')) # 在mac电脑上可能是'utf8'

学习最有效的方法一定是有输入,一定要输出,这样学的东西才能真正得有用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
Python中extend和append的区别讲解
Jan 24 Python
python os.fork() 循环输出方法
Aug 08 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
python实现简单飞行棋
Feb 06 Python
Python操作Excel把数据分给sheet
May 20 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
Python数据分析入门之教你怎么搭建环境
May 13 Python
Python3 类型标注支持操作
Jun 02 Python
python实现学员管理系统(面向对象版)
Jun 05 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 #Python
简单了解Python matplotlib线的属性
Jun 29 #Python
Jacobi迭代算法的Python实现详解
Jun 29 #Python
Gauss-Seidel迭代算法的Python实现详解
Jun 29 #Python
python异步实现定时任务和周期任务的方法
Jun 29 #Python
python循环定时中断执行某一段程序的实例
Jun 29 #Python
python顺序执行多个py文件的方法
Jun 29 #Python
You might like
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
python的re模块使用方法详解
2019/07/26 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
Python运算符+与+=的方法实例
2021/02/18 Python
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
保护动物倡议书
2014/04/15 职场文书
大专生找工作自荐书
2014/06/10 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
五年级数学教学反思
2016/02/16 职场文书
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL