Python网络编程详解

作者:潇潇、寒 时间:2022-01-09 15:25:10 

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
#TCP时间戳服务器
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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 = 21567
BUFSIZ = 1024
ADDR = (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 ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (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 = 21567
BUFSIZ = 1024
ADDR = (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()

来源:http://www.cnblogs.com/caicairui/p/7749678.html

标签:python,网络编程
0
投稿

猜你喜欢

  • 如何创建SQL Server 2000故障转移群集

    2009-02-13 17:18:00
  • python 实现以相同规律打乱多组数据

    2021-09-21 14:28:18
  • Python中用max()方法求最大值的介绍

    2021-12-08 09:33:06
  • python数据结构之列表和元组的详解

    2021-01-23 17:34:27
  • Python实现批量压缩图片

    2021-04-20 09:58:44
  • Python中int()函数的用法浅析

    2022-08-18 09:45:12
  • 如何使用Python处理HDF格式数据及可视化问题

    2023-11-21 00:17:01
  • python神经网络学习使用Keras进行回归运算

    2023-01-30 14:08:45
  • getAllResponseHeaders获取网页的http头信息代码

    2010-03-31 14:31:00
  • xhtml有哪些块级元素

    2009-12-06 11:58:00
  • 以SortedList为例详解Python的defaultdict对象使用自定义类型的方法

    2022-04-07 02:32:28
  • python实现截取屏幕保存文件,删除N天前截图的例子

    2021-09-19 18:13:49
  • 在SQL Server2000中恢复Master数据库

    2008-01-05 14:05:00
  • Python基于pillow库实现生成图片水印

    2021-08-01 10:45:38
  • 基于python检查矩阵计算结果

    2021-02-22 22:56:32
  • 用Python的Django框架来制作一个RSS阅读器

    2023-01-31 19:17:33
  • matplotlib基础绘图命令之imshow的使用

    2023-12-27 17:08:58
  • 对python条件表达式的四种实现方法小结

    2023-11-05 17:01:58
  • python登录豆瓣并发帖的方法

    2021-03-06 14:48:35
  • python中apply函数详情

    2023-06-03 14:58:15
  • asp之家 网络编程 m.aspxhome.com