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 == '': # 判断是否为空continueclient.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 socketserver = 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('客户端已断开')breakprint(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 socketclient = socket.socket() client.connect(('localhost', 9999)) while True:data = input('>>:').strip()if len(data) == 0:continueclient.send(data.encode('utf-8'))re_size = client.recv(1024).decode()print(re_size)client.send(b'True')re_cmd_two = 0print('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)
转载于:https://www.cnblogs.com/BookMiki/p/9999000.html
python 12 socket 编程相关推荐
- python的socket编程_Python Socket编程详细介绍
在使用Python做socket编程时,由于需要使用阻塞(默认)的方式来读取数据流,此时对于数据的结束每次都需要自己处理,太麻烦.并且网上也没找到太好的封装,所以就自己写了个简单的封装. 封装思路 1 ...
- Python:socket编程教程
ocket是基于C/S架构的,也就是说进行socket网络编程,通常需要编写两个py文件,一个服务端,一个客户端. 首先,导入Python中的socket模块: import socket Pytho ...
- Python中Socket编程
目录 Python中Socket编程 1 一.Socket概述 1 二.python中socket模块使用 1 三.socket之聊天室 3 四.socket之端口探测 7 五.scapy之tcp端口 ...
- Python基础-socket编程
一.网络编程 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的 ...
- python socket编程_最基础的Python的socket编程入门教程
本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...
- 使用 Python 进行 socket 编程
(5)类定义语句 所有的类都需要在这里定义.当模块被导入时 class 语句会被执行, 类也就会被定义.类 的文档变量是 class.__doc__. (7) 主程序 无论这个模块是被别的模块导 ...
- python之socket编程
From : http://www.cnblogs.com/aylin/p/5572104.html 1.socket socket起源于Unix,而Unix/Linux基本哲学之一就是"一 ...
- Python基础----Socket编程规范及底层原理(三)---socketserver实现并发及底层原理
Socket网络编程: 前面实现的TCP服务端只能接受一个用户接入,这里使用了并发来实现多用户接入,不废话直接上代码!原理后面慢慢给大家讲! import socketserverclass MySe ...
- python的socket编程
1.摘要 socket 2.socket简介 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐 ...
最新文章
- html video标签问题,用HTML5 video标签的一系列问题
- SQL中读取Excel 以及 bpc语言
- windows和linux共同分区格式,Linux和Windows共存的模式下分区要小心
- mysql两者之间_Django和MySQL - 两者之间的数据是不同的
- 多线程爬取新闻标题和链接
- MySQL 8.0 数据字典有哪些变化?
- 【kafka】一次磁盘故障后消费者无法消费
- Gandi下配置Github pages的自定义域名
- Socket编程之TCP实例(附C/C++代码详解)
- C - 二进制换十进制(简单)
- 【MCM-2017】2017年数学建模美赛题目原文及翻译-C (个人思路)
- linux提示tree命令未安装,linux中没有tree命令,command not found,解决办法
- java 门票订购系统_基于jsp的景区门票订购系统-JavaEE实现景区门票订购系统 - java项目源码...
- 大数据可视化 — 学期总结
- iview form表单验证手机号
- tipask 不能正常解析
- oracle20c最新版本,Oracle DUL支持Oracle 20c
- C++之Queue容器初学
- 去除网页腾讯 优酷 爱奇艺右上角logo水印
- boost::python::detail::destroy_referent相关的测试程序