python网络编程语言,python网络通信编程

  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端

  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()

使用python执行命令

  

importsubprocess

  a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)

  print(str(a.stdout.read(),'gbk'))#windows机器默认编码为gbk所以输出需要解码为gbk

bytes编码 与 str编码相互转换

  

str:unicode

  bytes:十六进制

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: