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 相关文章推荐
python处理html转义字符的方法详解
Jul 01 Python
python装饰器深入学习
Apr 06 Python
Python实现的堆排序算法示例
Apr 29 Python
Python Scapy随心所欲研究TCP协议栈
Nov 20 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Python超简单容易上手的画图工具库推荐
May 10 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
JAVA/JSP学习系列之六
2006/10/09 PHP
php中的三元运算符使用说明
2011/07/03 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
php实现httpclient类示例
2014/04/08 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
Vue不能观察到数组length的变化
2018/06/08 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python Matplotlib模块的使用
2020/09/16 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
环境科学专业大学生自荐信格式
2013/09/21 职场文书
秘书岗位职责
2013/11/18 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
小学领导班子对照材料
2014/08/23 职场文书
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python