上节课程回顾:

静态变量:与类无关,不能访问类里的任何属性和方法。

类方法:只能访问类变量。

属性:把一个方法变成静态属性,

反射:

__new__:先于__init__执行;

__call__:

 class Foo(object):
def __call__()
print "call" #这是什么??? #Foo() #后面跟一个括号是实例化
Foo()() #后面跟2个括号是执行call方法

抓住异常:

try

......

except (ValueError,KeyError), e     #in 2.7

except (ValueError,KeyError) as  e     #in 3.x

else:      #没发生异常就执行

finally   #无论如何都执行

raise (触发自己写的异常)

except Exception as e   #放在异常处理最后面,

异常处理:

断言(assert): 返回为假就不往下执行了。(例如银行转账,要确保正确才能转账)

例如:assert type(XXX) is str

本节内容:

一.动态导入模块

 import importlib

 __import__('import_lib.metaclass') #这是解释器自己内部用的
#importlib.import_module('import_lib.metaclass') #与上面这句效果一样,官方建议用这个

#__metaclass__用来定义这个类以怎样的形式被创建(我们很少用到)

本节课内容:

1.socket :网络上的数据收发。

tcp/ip  send ,recv

udp

family address (地址簇):

AF.INET   (ipv4)

AF.INET6

AF.UNIX    (local

socket protocol type (协议类型)

sock.SOCK_STREAM    (tcp/ip)

sock.SOCK_DGRAM

服务端步骤:

server = socket.socket(AF.INET,sock.SOCK_STREAM)

server.bind(localhost,9999)

server.listen()

while True:

conn, addr = server.accept()   #阻塞

while True:

print("new conn", addr)

data = conn.recv(1024)  #不应该超过8192(8k)#recv默认是阻塞的

if not data:

break   #客户端已断开,conn.recv收到的就是空数据,

print(data)

conn.send(data.upper())

客户端步骤:

client = socket.socket()

client.connect(serverip,9999)

client.send(data)

client.recv(data)

 import socket
import os
server = socket.socket()
server.bind(('localhost',1111)) server.listen() while True:
conn,addr = server.accept()
print("new conn:",addr)
while True:
data = conn.recv(1024)
if not data:
print("客户端已断开")
break
print("执行指令:", data)
cmd_res = os.popen(data.decode()).read() #接收字符串,执行结果也是字符串
conn.send(cmd_res.encode("utf-8")) server.close()
 import socket
client = socket.socket()
client.connect(('localhost',1111)) while True:
cmd = input(">>:").strip() #cmd = input(b">>:").strip()如果前面直接加b,则只能传英文
if len(cmd) == 0 : continue
client.send(cmd.encode())
cmd_res = client.recv(1024) print(cmd_res.decode()) client.close()

运行结果:

>>:ipconfig

Windows IP 配置

以太网适配器 以太网:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . : 无线局域网适配器 本地连接* 2: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . : 无线局域网适配器 本地连接* 4: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . : 无线局域网适配器 本地连接* 5: 媒体状态 . . . . . . . . . . . . : 媒体已断开连接
连接特定的 DNS 后缀 . . . . . . . : 无线局域网适配器 WLAN: 连接特定的 DNS 后缀 . . . . . . . : workgroup
本地链接 IPv6 地址. . . . . . . . : fe80::1585:c613:2947:4558%17
IPv4 地址 . . . . . . . . . . . . : 172.25.81.3
子网掩码 . . . . . . . . . . . . : 255.255.0.0
默认网关. . . . . . . . . . . . . : 172.25.81.1

 注:1.服务器与客户端解码编码四次。

2.(1024)传输与接收数据大小的问题:

缓冲区:比如一次只能接收1024,发送了2000,省下的900左右会存在缓冲区了,等下次发送,但这样会乱,怎么解决?

答:多收几次。

问:但具体多收几次呢?

答:服务器自己计算一下自己将要给客户端多大的数据,几次能接收完,先把次数发给客户端。

python------Socket网略编程的更多相关文章

  1. python------Socket网略编程+动态导入模块

    上节课程回顾: 静态变量:与类无关,不能访问类里的任何属性和方法. 类方法:只能访问类变量. 属性:把一个方法变成静态属性, 反射: __new__:先于__init__执行: __call__: c ...

  2. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...

  3. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  4. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  5. Python Socket,How to Create Socket Server? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  6. Python Socket,How to Create Socket Cilent? - 网络编程实例

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  7. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...

  8. PYTHON SOCKET编程简介

    原文地址: PYTHON SOCKET编程详细介绍   Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 Soc ...

  9. python socket编程笔记

    用python实现一个简单的socket网络聊天通讯 (Linux --py2.7平台与windows--py3.6平台) 人生苦短之我用Python篇(socket编程) python之路 sock ...

随机推荐

  1. Learning-Python【17】:包的导入使用

    在同一级目录下新建 p1.py 和 run.py,添加代码 # p1.py 模块的设计者 def f1(): print("from f1") def f2(): print(&q ...

  2. Visual Studio 实用扩展工具

    Indent Guides 为每个缩进绘制一条虚线: Highlight all occurrences of selected word 高亮相关代码: Productivity Power Too ...

  3. EF Core

    一个事务中    先在数据库查出一条数据进行修改      然后在进行查询  他会直接在内存中找到这条数据  不会再数据库查询了 EF Core的 linq语句中可以使用C#方法或函数   在EF6或 ...

  4. [译] 关于 Angular 依赖注入你需要知道的

    如果你之前没有深入了解 Angular 依赖注入系统,那你现在可能认为 Angular 程序内的根注入器包含所有合并的服务提供商,每一个组件都有它自己的注入器,延迟加载模块有它自己的注入器. 但是,仅 ...

  5. Linux出现wrong ELF class: ELFCLASS64

    安装软件时出现问题   ×.so.×:wrong ELF class: ELFCLASS64 ,大致的意思是软件是32位的,需要32位的 ×.so.×动态链接库,而系统是64位的所提供的该 动态链接库 ...

  6. yii中的restful方式输出并调用接口和判断用户是否登录状态

    //创建一个控制器接口 返回的是restful方式 <?php namespace frontend\controllers; use frontend\models\Fenlei; use f ...

  7. Servlet 会话技术cookie和session

    会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...

  8. mysql查询今天、昨天、上周

    mysql查询今天.昨天.上周 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE ...

  9. JSP、EL表达式的入门(要用)

    2018-08-12   22:55:23 * JSP.EL表达式的入门(要用)    * Servlet/JSP  是两种动态的WEB资源的两种技术.   * 使用Servlet 生成HTML的页面 ...

  10. unity中 UGUI的按下、拖动接口事件的实现

    using UnityEngine; using System.Collections.Generic; using DG.Tweening; using UnityEngine.EventSyste ...