首页 > 编程 > Python > 正文

Python网络编程详解

2020-01-04 16:25:48
字体:
来源:转载
供稿:网友

1、服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求。

2、客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件。

3、在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求。

一、套接字:通信端点

1、套接字

  套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。

  有两种类型的套接字:基于文件和面向网络的。

2、套接字地址:主机-端口对

  如果一个套接字像一个电话插孔-允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。有效的端口号范围为0-65535(小于1024的端口号预留给了系统)

3、面向连接的套接字和与无连接的套接字

  面向连接,在进行通信之前必须建立一个连接。实现这种连接类型主要协议是TCP(传输控制协议)

  无连接,在通信之前并不需要建立连接。主要协议是UDP(用户数据报协议)

二、Python中的网络编程

1、socket()模块函数

为创建TCP/IP套接字:tcpSock = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)

创建UDP/IP套接字:udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

2.常见的套接字对象方法和属性

 

名称 描述
服务器套接字方法  
s.bind()  将地址(主机名、端口号对)绑定到套接字上
s.listen() 设置并启动TCP监听器
s.accept() 被动接受TCP客户端连接,一直等待直到连接到达(阻塞)
客户端套接字方法  
s.connect() 主动发起TCP服务器连接
s.connect_ex() connect的扩展版本,此时会以错误代码的形式返回问题,而不是抛出一个异常
普通的套接字方法  
s.recv() 接受TCP消息
s.send() 发送TCP消息
s.sendall() 完整的发送TCP消息
s.recvfrom() 接收UDP消息
s.shutdown() 关闭连接
s.close() 关闭套接字

 

3、创建TCP服务器

ss = socket()  #创建服务器套接字ss.bind()      #套接字与地址绑定ss.listen()      #监听连接inf_loop:       #服务器无限循环  cs = ss.accept()     #接收客户端连接  comm_loop:        #通信循环    cs.recv()/cs.send()  #对话(接收、发送)  cs.close()       #关闭客户端套接字ss.close()        #关闭服务器套接字(可选)
#!/usr/bin/env python/103913.html">python#TCP时间戳服务器from socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)tcpSerSock = socket(AF_INET,SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True:  print('waiting for connecting...')  tcpClisock, addr = tcpSerSock.accept()  print('...connected from:',addr)  while True:    data = tcpClisock.recv(BUFSIZ)    if not data:      break    tcpClisock.send('[%s] %s' % (bytes(ctime(),'utf-8'),data))  tcpClisock.close()tcpSerSock.close()

4、创建TCP客户端

cs = socket()cs.connect()comm_loop:  cs.send()/cs.recv()cs.close()
#!/usr/bin/env python#TCP时间戳客户端from socket import *HOST = '127.0.0.1'PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)tcpClisock = socket(AF_INET,SOCK_STREAM)tcpClisock.connect(ADDR)while True:  data = input('> ')  if not data:    break  tcpClisock.send(data)  data = tcpClisock.recv(BUFSIZ)  if not data:    break  print(data.decode('utf-8'))tcpClisock.close()

5、创建UDP服务器

ss = socket()ss.bind()inf_loop:  cs = ss.recvfrom()/ss.sendto()ss.close()
#!/usr/bin/env python#UDP时间戳服务器from socket import *from time import ctimeHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)udpSerSock = socket(AF_INET,SOCK_DGRAM)udpSerSock.bind(ADDR)while True:  print('waiting for message...')  data, addr=udpSerSock.recvfrom(BUFSIZ)  udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)  print('...received from and returned to:',addr)udpSerSock.close()

6、创建UDP客户端

cs = socket()comm_loop:  cs.send()/cs.recvfrom()cs.close()
#!/usr/bin/env python#UDP时间戳客户端from socket import *HOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST,PORT)udpClisock = socket(AF_INET,SOCK_DGRAM)while True:  data = input('> ')  if not data:    break  udpClisock.sendto(data,ADDR)  data, ADDR=udpClisock.recvfrom(BUFSIZ)  if not data:    break  print(data)udpClisock.close()

以上就是本文关于Python网络编程详解的全部内容,希望对大家有所帮助。有什么问题可以随时留言,有问题我就改。。。


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表