Python网络编程网络编程

Python网络编程网络编程教程

网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。

现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。

在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。

连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。

什么是端口

为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。

规定一个设备有 216 个,也就是 65536 个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于 0-1024 之间多被操作系统占用,所以实际编程时一般采用1024 以后的端口号。

使用端口号,可以找到一台设备上唯一的一个程序。所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。

数据传输方式

在网络上,不管是有线传输还是无线传输,数据传输的方式有两种:

<!--[if !supportLists]-->l <!--[endif]-->TCP(Transfer Control Protocol)

传输控制协议方式,该传输方式是一种稳定可靠的传送方式,类似于显示中的打电话。只需要建立一次连接,就可以多次传输数据。就像电话只需要拨一次号,就可以实现一直通话一样,如果你说的话不清楚,对方会要求你重复,保证传输的数据可靠。

使用该种方式的优点是稳定可靠,缺点是建立连接和维持连接的代价高,传输速度不快。

<!--[if !supportLists]-->l <!--[endif]-->UDP(User Datagram Protocol)

用户数据报协议方式,该传输方式不建立稳定的连接,类似于发短信息。每次发送数据都直接发送。发送多条短信,就需要多次输入对方的号码。该传输方式不可靠,数据有可能收不到,系统只保证尽力发送。

使用该种方式的优点是开销小,传输速度快,缺点是数据有可能会丢失。在实际的网络编程中,大家可以根据需要选择任何一种传输方式,或组合使用这两种方式实现数据的传递。

协议的概念

协议(Protocol)是网络编程中一个非常重要的概念,指的是传输数据的格式。因为大家在网络中需要传输各种各样的信息,在程序中获得到的都是一组数值,如何阅读这些数值呢,就需要提前规定好这组数据的格式。

在客户端按照该格式生成发送数据,服务器端按照该格式阅读该数据,然后在按照一定的格式生成数据反馈给客户端,客户端再按照该格式阅读数据。现实中类似的例子就是电报编码,每个数字都是用特定的数据表达。

一般程序的协议都分成客户端发送的数据格式,以及服务器端反馈的数据格式,客户端和服务器端都遵循该格式生成或处理数据,实现两者之间的复杂数据交换。

网络编程分类

网络编程有两种模式,即 TCP/UDP Socket 编程和 b/s 结构的 HTTP 编程。

TCP Socker 编程,是网络编程的主流。之所以叫 TCP Socket 编程,是因为底层是基于 Tcp/ip 协议的。

b/s 结构的 http 编程,我们使用浏览器去访问服务器时,使用的就是 http 协议,而 http 协议底层是用 tcp socket 实现的。

Python网络编程总结

网络编程就是使用 IP 地址,或域名,和端口连接到另一台计算机上对应的程序,按照规定的协议(数据格式)来交换数据,实际编程中建立连接和发送、接收数据在语言级已经实现,做的更多的工作是设计协议,以及编写生成和解析数据的代码罢了,然后把数据转换成逻辑的结构显示或控制逻辑即可。