python------Socket网略编程
Posted 百里屠苏top
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python------Socket网略编程相关的知识,希望对你有一定的参考价值。
上节课程回顾:
静态变量:与类无关,不能访问类里的任何属性和方法。
类方法:只能访问类变量。
属性:把一个方法变成静态属性,
反射:
__new__:先于__init__执行;
__call__:
1 class Foo(object): 2 def __call__() 3 print "call" #这是什么??? 4 5 #Foo() #后面跟一个括号是实例化 6 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
本节内容:
一.动态导入模块
1 import importlib
2
3 __import__(\'import_lib.metaclass\') #这是解释器自己内部用的
4 #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)
1 import socket
2 import os
3 server = socket.socket()
4 server.bind((\'localhost\',1111))
5
6 server.listen()
7
8 while True:
9 conn,addr = server.accept()
10 print("new conn:",addr)
11 while True:
12 data = conn.recv(1024)
13 if not data:
14 print("客户端已断开")
15 break
16 print("执行指令:", data)
17 cmd_res = os.popen(data.decode()).read() #接收字符串,执行结果也是字符串
18 conn.send(cmd_res.encode("utf-8"))
19
20 server.close()
1 import socket
2 client = socket.socket()
3 client.connect((\'localhost\',1111))
4
5 while True:
6 cmd = input(">>:").strip() #cmd = input(b">>:").strip()如果前面直接加b,则只能传英文
7 if len(cmd) == 0 : continue
8 client.send(cmd.encode())
9 cmd_res = client.recv(1024)
10
11 print(cmd_res.decode())
12
13 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网略编程的主要内容,如果未能解决你的问题,请参考以下文章