python网络编程语言,python网络通信编程
OSI 模型介绍
应用层解释、加密和解密、压缩和解压缩接收到的数据。
会话层——通过传输层(端口号:传输端口和接受端口)建立数据传输的路径。
传输层-定义了一些协议和端口号(www端口80等。)进行数据传输,比如:TCP。
网络层——主要是用IP地址(例如192.168.0.1)封装和解封装从下层接收的数据。
数据链路层-主要封装和解封装从物理层接收的数据的MAC地址。
物理层——主要定义物理设备标志,比如过去的接口类型,跟踪传输介质的传输速率等。
TCP/IP协议
参考模型将所有TCP/IP协议分为四个抽象层。
应用层- TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet等。
传输层- TCP、UDP
网络层- IP、ICMP、OSPF、EIGRP、IGMP
数据链路层- SLIP,CSLIP,PPP,MTU
Socket 通信流程
相关方法及参数介绍
family=af _ inet3360服务器之间的通信
Family=AF _ Unix3360Unix进程间通信
sk.bind(地址)
#s.bind(address)将套接字绑定到地址。地址的格式取决于地址族。在AF_INET下,地址以元组(主机,端口)的形式表示。
sk.listen(backlog)
#开始侦听传入的连接。Backlog指定在拒绝连接之前可以挂起的连接数。
#backlog等于5,表示内核收到了连接请求,但是服务器没有调用accept进行处理的连接数是5。
#该值不能太大,因为连接队列将在内核中维护。
sk.setblocking(bool)
#阻塞(默认为真)。如果设置为False,一旦accept和recv中没有数据,将会报告错误。
sk.accept()
#接受连接并返回(conn,address),其中conn是一个新的套接字对象,可用于接收和发送数据。Address是连接客户端的地址。
#接收TCP客户端的连接(阻塞)并等待连接到达。
sk.connect(地址)
#连接到地址处的套接字。一般来说,地址的格式是元组(主机名,端口)。如果连接出错,将返回socket.error error错误。
sk.connect_ex(地址)
#同上,只是会有返回值,连接成功时为0,连接失败时为代码,例如:10061。
sk.close()
#关闭插座
sk.recv(缓冲区大小[,标志])
#接受套接字的数据。以数据字符串形式返回,bufsize指定可以接收的最大数量。标志提供了有关消息的其他信息,通常可以忽略。
sk.send(字符串[,标志])
#将字符串中的数据发送到连接的套接字。返回值是要发送的字节数,可能小于string的字节大小。也就是说,并非所有指定的内容都可以被发送。
sk.sendall(字符串[,标志])
#将字符串中的数据发送到连接的套接字,但尝试在返回之前发送所有数据。成功时返回None,失败时抛出异常。
#在内部,通过递归调用send发送所有内容。简单的通信(client 端发送消息,server 端接收,一发一收)
相关:《Python视频教程》
#服务器端
导入套接字
sk=socket.socket()
地址=(127.0.0.1 ,8000)
sk.bind(地址)
sk.listen(3)
打印(等待…)
conn,addr=sk.accept()
while1:
data=conn . recv(1024)#服务器通过conn接收和发送数据
打印(……、字符串(数据,
9;utf8'))
ifnotdata:break
inp=input('>>>')
conn.send(bytes(inp,'utf8'))
sk.close()
#client端
importsocket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.connect(address)
whileTrue:
inp=input('>>>')
ifinp=='exit':
break
sk.send(bytes(inp,'utf8'))#client端通过sk接收和发送数据
data=sk.recv(1024)
print(str(data,'utf8'))
sk.close()简单的通信(server 持续监听)
#server端使用python执行命令importsocket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.bind(address)
sk.listen(3)
print('waiting....')
while1:
conn,addr=sk.accept()
print(addr)
while1:
try:
data=conn.recv(1024)
exceptException:
break
print('.....',str(data,'utf8'))
inp=input('>>>')
conn.send(bytes(inp,'utf8'))
sk.close()
#client端
importsocket
sk=socket.socket()
address=('127.0.0.1',8000)
sk.connect(address)
whileTrue:
inp=input('>>>')
ifinp=='exit':
break
sk.send(bytes(inp,'utf8'))
data=sk.recv(1024)
print(str(data,'utf8'))
sk.close()
importsubprocessbytes编码 与 str编码相互转换a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
print(str(a.stdout.read(),'gbk'))#windows机器默认编码为gbk所以输出需要解码为gbk
str:unicodebytes:十六进制
s='hello,陈先生'
print(type(s))#<class'str'>
b=bytes(s,'utf8')#str编码成bytes
print(type(b))#<class'bytes'>
print(b)#b'hello,\xe9\x99\x88\xe5\x85\x88\xe7\x94\x9f
b2=s.encode('utf8')#str编码成bytes
print(type(b2))#<class'bytes'>
print(b)#b'hello,\xe9\x99\x88\xe5\x85\x88\xe7\x94\x9f
s1=str(b2,'utf8')#bytes解码成str
print(s1)#hello,陈先生
s2=b2.decode('utf8')#bytes解码成str
print(s2)#hello,陈先生
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。