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中精确输出JSON浮点数的方法
Apr 18 Python
Python中的pack和unpack的使用
Mar 12 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 Python
python reverse反转部分数组的实例
Dec 13 Python
Python函数中不定长参数的写法
Feb 13 Python
python类的实例化问题解决
Aug 31 Python
自学python用什么系统好
Jun 23 Python
解决Python安装cryptography报错问题
Sep 03 Python
python openCV自制绘画板
Oct 27 Python
python调用百度API实现人脸识别
Nov 17 Python
如何用python批量调整视频声音
Dec 22 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中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python正则表达式面试题解答
2020/04/28 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
TensorFlow变量管理详解
2018/03/10 Python
Python subprocess库的使用详解
2018/10/26 Python
对Django url的几种使用方式详解
2019/08/06 Python
一组SQL面试题
2016/02/15 面试题
汽车检测与维修专业求职信
2013/10/30 职场文书
奠基仪式策划方案
2014/05/15 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
小学母亲节活动总结
2015/02/10 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python