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 相关文章推荐
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 Python
Python缩进和冒号详解
Jun 01 Python
Python中str.format()详解
Mar 12 Python
关于Python 3中print函数的换行详解
Aug 08 Python
详解pandas中MultiIndex和对象实际索引不一致问题
Jul 23 Python
django-filter和普通查询的例子
Aug 12 Python
django+echart数据动态显示的例子
Aug 12 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
Python docutils文档编译过程方法解析
Jun 23 Python
Python如何对XML 解析
Jun 28 Python
python中Mako库实例用法
Dec 31 Python
Python学习之异常中的finally使用详解
Mar 16 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 文章采集正则代码
2009/12/28 PHP
详解php中反射的应用
2016/03/15 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
动态加载js的几种方法
2006/10/23 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
JS判断时间段的实现代码
2017/06/14 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
分析JS中this引发的bug
2017/12/12 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
获取Django项目的全部url方法详解
2017/10/26 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
职业生涯规划书的格式
2013/12/29 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
会计学专业求职信
2014/07/17 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
毕业欢送会致辞
2015/07/29 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle