python <12> socket 编程
1.socket编程需要两个部分 服务器与客户端我们的python中调用 socket包就不需要自己写协议了(socket编程中windows 与Linux中的效果是完全不相同了,次代码最好是放在Linux上运行)
# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki # 服务器 import socket
server = socket.socket() # 声明socket类型,同时生成socket连接对象
server.bind(('localhost', 6969)) # 绑定要监听的端口此时绑定的是本地
server.listen() # 监听 括号里面的就是最大允许链接
print('等待电话打进来')
coon, addr = server.accept() # 等待 (此时上面加一个while 就可以多个电话打进来并且进行通话)
# coon 就是客户端连过来而在服务器端为其生成的一个连接实例
# addr 就是地址
print('电话打进来了')
print(coon, addr) # 将coon 与addr 显示出来
while True: # 此时就可以一直不停的发送数据了, 此时的效果就是一个电话可以无阻碍的通话
# 如果此时没有true的话就只能接收一次了
data = coon.recv(1024) # 接收数据
print('recv:', data.decode()) # 此时注意我们需要吧接收的数据解码,因为发过来的是byte类型
coon.send(data.upper()) # 将数据里面的字母转化为大写发送
server.close()
2.客户端
# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki # 客户端 import socket
client = socket.socket() # 声明socket类型,同时生成socket连接对象
client.connect(('localhost', 6969)) # 连接
while True:
ccc = input('>>:')
if ccc == '': # 判断是否为空
continue
client.send(ccc.encode('utf-8')) # 发送byte类型
data = client.recv(1024) # 接收返回
print(data.decode()) # 解码
那下面我们可以了解一下 完整的程序了
# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki # 第一步1.import 模块 然后实例一个模块 若是服务器的话要绑定 在监听,然后等待(返回两个值) 然后接收然后在发送
import os
import socket server = socket.socket()
server.bind(('localhost', 9999)) # 绑定地址
server.listen() # 监听
print('等待电话')
while True:
con, addr = server.accept()
print('电话来了')
while True:
data = con.recv(1024) # 接收数据
if not data:
print('客户端已断开')
break
print(data.decode())
cmd_res = os.popen(data.decode()).read()
con.send(str(len(cmd_res)).encode('utf-8'))
if len(cmd_res) == 0:
cmd_res = 'cmd_res has no thing....'
client_re = con.recv(1024) # 此处的精妙(隔开两个send)
con.send(cmd_res.encode('utf-8')) # 返回数据
server.close() # 关闭 # socker粘包(两个send连在一起缓冲区) 例如
# con.send(str(len(cmd_res)).encode('utf-8'))
# con.send(cmd_res.encode('utf-8')) # 此时系统将两个send当作一个发。就需要在中间加一个client_re = con.recv(1024) 来等待 就可以做到
# 也就是等到客户端确认
2.2客户端
# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki # 客户端 第一步导入模块,然后实例化一个 然后链接,然后发送 然后接收反回 import socket client = socket.socket()
client.connect(('localhost', 9999))
while True:
data = input('>>:').strip()
if len(data) == 0:
continue
client.send(data.encode('utf-8'))
re_size = client.recv(1024).decode()
print(re_size)
client.send(b'True')
re_cmd_two = 0
print('re_cmd_two:', type(re_cmd_two))
print('re_size: ', type(re_size))
print('大小为:', re_size)
while re_cmd_two <= int(re_size):
re_cmd_one = client.recv(1024)
print(re_cmd_one.decode())
re_cmd_two = re_cmd_two + len(re_cmd_one.decode())
print(re_cmd_two)
print(re_cmd_two)
python <12> socket 编程的更多相关文章
- 转:Python 的 Socket 编程教程
这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...
- Python 3 socket 编程
Python 3 socket编程 一 客户端/服务器架构 互联网中处处是C/S架构 1.C/S结构,即Client/Server(客户端/服务器)结构 2.在互联网中处处可见c/s架构 比如说浏览器 ...
- 最基础的Python的socket编程入门教程
最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...
- python之socket编程(一)
socket之前我们先来熟悉回忆几个知识点. OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标 ...
- Python:socket编程教程
ocket是基于C/S架构的,也就是说进行socket网络编程,通常需要编写两个py文件,一个服务端,一个客户端. 首先,导入Python中的socket模块: import socket Pytho ...
- python学习------socket编程
一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- Python基础socket编程
Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...
- Python基础-socket编程
一.网络编程 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的 ...
- Python 006- python socket编程详细介绍
转自https://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供 ...
随机推荐
- 基于Python的接口自动化实战-基础篇之读写配置文件
引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值.为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这些变量和变 ...
- 我是先学C语言还是先学C++,实不相瞒,鱼和熊掌可兼得!
这是最近一周时间几个读者小伙伴所提的问题,我顺手截了两个图. 实不相瞒,这类问题之前也经常看到. 每次遇到这种问题,看起来很简单,但是打字一时半会还真说不清,想想今天周末了,写一篇文章来统一聊 ...
- 【C/C++编程入门学习】同样是数据类型,链表对比数组?哪一个更香?
说起链表,第一反应:链表是一种数据类型!它可以用来存储同种类型多个批量数据. 有了这种认知,很容易去联想到数组,它也是一种数据类型,也可以用来存储同种类型的批量数据.初学者往往对数组的印象比较好, ...
- 扫描仪扫描文件处理-Photoshop批处理弹出色阶设置框解决
为什么我录制动作明明设置的有色阶,最后批处理的时候仍然弹出了色阶设置框? 出现问题原因可能是你在录入设置色阶动作的时候,是彩色图片或者灰阶中的一种,而批处理的时候遇到了另外一种色彩模式.所以动作中 ...
- 【二分图】HEOI2012 朋友圈
题目内容 洛谷链接 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大 ...
- Linux关联文件扩展名和打开程序
手动为Linux关联文件扩展名与打开程序. 当Linux不认识某种扩展名的时候,需要为此扩展名创建一个MIME类型.Linux是依据MIME类型而不是扩展名来决定打开程序的. 再将此种MIME类型与某 ...
- zookeeper-(单机,伪集群)
安装zookeeper(单机,伪集群): 1.下载 登陆zookeeper官网下载 https://zookeeper.apache.org/ 或者 https://mirror.bit.e ...
- 构造函数原理 - Js对象
构造函数内部原理 有new之后,函数变成构造函数,产生三步隐式变化 1.函数执行,在函数体顶端隐式加上var this = {}; 2.执行赋值,AO{ this : {name:'zhangsan' ...
- Python ( 学习 基础篇第一部 )
目录 注释 注释的分类 注释的注意点 变量 变量的概念 变量的声明 变量的命名 变量的交换 变量的缓存机制 常量 进制 进制的转换 原码 反码 补码 六大数据类型 Number 的四大类 字符串 st ...
- D. Regular Bridge 解析(思維、圖論)
Codeforce 550 D. Regular Bridge 解析(思維.圖論) 今天我們來看看CF550D 題目連結 題目 給你一個\(k\le100\),請構造出一個至少有一個Bridge的,每 ...