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使用urllib2获取网络资源实例讲解
Dec 02 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
python实现对变位词的判断方法
Apr 05 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Python爬虫与反爬虫大战
Jul 30 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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 的异常处理程序
2014/06/22 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
php实现算术验证码功能
2018/12/05 PHP
javascript读取RSS数据
2007/01/20 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
JS中==与===操作符的比较
2009/03/21 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python实现绘制树枝简单示例
2014/07/24 Python
简单上手Python中装饰器的使用
2015/07/12 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
numpy自动生成数组详解
2017/12/15 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python3内置模块random随机方法小结
2019/07/13 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
工作表现自我评价
2014/02/08 职场文书
学校评语大全
2014/05/06 职场文书
情况说明书格式范文
2014/05/06 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
债务纠纷委托书
2014/08/30 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫