Python网络编程之UDP

1.1. 网络

Python网络编程之UDP

网络就是一种辅助双方或者多方能够连接在一起的工具。

使用网络的目的

就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方。 前面的学习编写的程序都是单机的,即不能和其他电脑上的程序进行通信。 为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能。 所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。

1.2. ip地址

ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。

1.3. 端口

Python网络编程之UDP

端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。 通过ip我们能够找到网络上的一台主机,一台主机上有很多网络应用,这些网络应用在不同端口进行监听,收取发往自己端口的数据。通过ip+端口,我们的应用程序可以在不同主机间通信。

知名端口

知名端口是众所周知的端口号,范围从0到1023

80端口分配给HTTP服务
21端口分配给FTP服务

1.4. tcp-ip

作为新时代标杆的我们,已经离不开手机、离不开网络,对于互联网大家可能耳熟能详,但是计算机网络的出现比互联网要早很多

1.5. 什么是协议

Python网络编程之UDP

有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了

为了解决不同种族人之间的语言沟通障碍,现规定国际通用语言是英语,这就是一个规定,这就是协议

计算机网络沟通用什么

现在的生活中,不同的计算机只需要能够联网(有线无线都可以)那么就可以相互进行传递数据

Python网络编程之UDP

那么不同种类之间的计算机到底是怎么进行数据传递的呢?

就像说不同语言的人沟通一样,只要有一种大家都认可都遵守的协议即可,那么这个计算机都遵守的网络通信协议叫做TCP/IP协议

TCP/IP协议(族)

早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容

为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议族(Internet Protocol Suite)就是通用协议标准。

因为互联网协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP协议,所以,大家把互联网的协议简称TCP/IP协议(族)

常用的网络协议如下图所示:

Python网络编程之UDP

Python网络编程之UDP

说明:

网际层也称为:网络层
网络接口层也称为:链路层

1.6. Socket

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少需要两端(socket)。socket本质是编程接口(API),是对TCP/IP或UDP/IP协议的封装,TCP/IP或UDP/IP协议也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。

1.7. UDP

UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。

udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中"写信"(只需将信件投入信箱),不能确认收信人最终是否收到。 Python网络编程之UDP

udp通信中,服务器客户端通信流程:

Python网络编程之UDP

server.py

from socket import *
from time import ctime
HOST = ''
PORT = 8888
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)
    content = '[%s] %s' % (bytes(ctime(), "utf-8"), data)
    udpSerSock.sendto(content.encode("utf-8"), addr)
    print('...received from and returned to:', addr)
udpSerSock.close()
上一篇:一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库(三)


下一篇:C语言中可变参数的使用