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 编程相关推荐

  1. python的socket编程_Python Socket编程详细介绍

    在使用Python做socket编程时,由于需要使用阻塞(默认)的方式来读取数据流,此时对于数据的结束每次都需要自己处理,太麻烦.并且网上也没找到太好的封装,所以就自己写了个简单的封装. 封装思路 1 ...

  2. Python:socket编程教程

    ocket是基于C/S架构的,也就是说进行socket网络编程,通常需要编写两个py文件,一个服务端,一个客户端. 首先,导入Python中的socket模块: import socket Pytho ...

  3. Python中Socket编程

    目录 Python中Socket编程 1 一.Socket概述 1 二.python中socket模块使用 1 三.socket之聊天室 3 四.socket之端口探测 7 五.scapy之tcp端口 ...

  4. Python基础-socket编程

    一.网络编程 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的 ...

  5. python socket编程_最基础的Python的socket编程入门教程

    本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...

  6. 使用 Python 进行 socket 编程

    (5)类定义语句  所有的类都需要在这里定义.当模块被导入时 class 语句会被执行, 类也就会被定义.类 的文档变量是 class.__doc__.  (7) 主程序  无论这个模块是被别的模块导 ...

  7. python之socket编程

    From : http://www.cnblogs.com/aylin/p/5572104.html 1.socket socket起源于Unix,而Unix/Linux基本哲学之一就是"一 ...

  8. Python基础----Socket编程规范及底层原理(三)---socketserver实现并发及底层原理

    Socket网络编程: 前面实现的TCP服务端只能接受一个用户接入,这里使用了并发来实现多用户接入,不废话直接上代码!原理后面慢慢给大家讲! import socketserverclass MySe ...

  9. python的socket编程

    1.摘要 socket 2.socket简介 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐 ...

最新文章

  1. html video标签问题,用HTML5 video标签的一系列问题
  2. SQL中读取Excel 以及 bpc语言
  3. windows和linux共同分区格式,Linux和Windows共存的模式下分区要小心
  4. mysql两者之间_Django和MySQL - 两者之间的数据是不同的
  5. 多线程爬取新闻标题和链接
  6. MySQL 8.0 数据字典有哪些变化?
  7. 【kafka】一次磁盘故障后消费者无法消费
  8. Gandi下配置Github pages的自定义域名
  9. Socket编程之TCP实例(附C/C++代码详解)
  10. C - 二进制换十进制(简单)
  11. 【MCM-2017】2017年数学建模美赛题目原文及翻译-C (个人思路)
  12. linux提示tree命令未安装,linux中没有tree命令,command not found,解决办法
  13. java 门票订购系统_基于jsp的景区门票订购系统-JavaEE实现景区门票订购系统 - java项目源码...
  14. 大数据可视化 — 学期总结
  15. iview form表单验证手机号
  16. tipask 不能正常解析
  17. oracle20c最新版本,Oracle DUL支持Oracle 20c
  18. C++之Queue容器初学
  19. 去除网页腾讯 优酷 爱奇艺右上角logo水印
  20. boost::python::detail::destroy_referent相关的测试程序

热门文章

  1. 让你真正体验一次主板超频的步骤以及成功的快乐
  2. WP7 应用数据存储Tombstoning(墓碑化)篇
  3. 如何获取ResultSet的行数和列数
  4. datalist,Repeater和Gridview的区别分析
  5. Apache Commons-logging使用实例
  6. golang操作文件
  7. setsockopt()函数功能介绍
  8. 数据结构:复杂度分析以及数据结构整体概览
  9. 《Adobe Photoshop CC经典教程(彩色版)》—第4课4.7节添加调整图层
  10. 云计算里AWS和Azure的探究(2)