忙了两天,继续更文!希望多多支持。
套接字
套接字是一种具有之前所说的"通讯端点"概念的计算机网络数据结构。网络化的应用程序在开始任何通讯之前都必需要创建套接字。
套接字有三种:
1、 AF_UNIX(在 POSIX1.g 标准中也叫 AF_LOCAL),表示"地址家族:UNIX",是指在unix系统中使用的 套接字,这些套接字是基于文件的。所以,它们的底层结构是由文件系统来支持的。
2、 AF_INET或叫"地址家族:Internet"。它是基于网络的,还有一种地址家族 AF_INET6 被用于网际协议第 6 版(IPv6)寻址上。
3、 AF_NETLINK:Python 2.5 中加入了一种 Linux 套接字的支持:AF_NETLINK(无连接)套接字家族让用户代码与内核代码之间的 IPC 可以使用标准 BSD 套接字接口。
Python 只支持 AF_UNIX,AF_NETLINK,和 AF_INET 家族。我们平时使用的大部分都是基于网络的,所以,主要用AF_INET。
1、 面向连接与无连接
有过网络基础的人都会了解TCP协议和UDP协议,他俩是不同的。主要区别就是TCP是基于面向连接的,而UDP是无连接的。
面向连接
即在通讯之前一定要建立一条连接,就像跟朋友打电话时那样。TCP协议在和别人通信的时候首先要进行三次握手和建立连接,才能继续通信。
要创建 TCP 套接字就得在创建的时候,指定套接字的类型为 SOCK_STREAM。TCP 套接字采用 SOCK_STREAM 这个名字,表达了它做为流套接字的特点。由于这些套接字使用 Internet 协议(IP)来查找网络中的主机,这样形成的整个系统,一般会由这两个协议(TCP 和 IP)来提及,即 TCP/IP。
无连接
无连接和面向连接正好相反,它不需要先和别人建立连接,而是直接和别人通讯,就像我直接对你喊话一样。这样不能保证通讯的可靠性和数据完整性。这种协议主要用在一些在线视频传输方面,因为视频中丢一点信息对观看影响不大。
实现这种连接的主要协议就是用户数据报协议(即 UDP)。要创建 UDP 套接字在创建的时候,指定套接字类型为 SOCK_DGRAM。S由于这些套接字使用 Internet 协议来查找网络中的主机,这样形成的整个系统,一般会由这两个协议(UDP 和 IP)来提及,即 UDP/IP。
socket()模块函数
在python中,我们主要调用socket()函数来进行 网络编程。
socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。这几个常量的意义可以参考之前的解释。protocol 一般不填,默认值为 0。
创建一个 TCP/IP 的套接字,你要这样调用 socket.socket():
同样地,创建一个 UDP/IP 的套接字,你要这样:
python套接字函数:
TCP编程:
客户端和服务器建立连接流程图如下:
TCP服务器编程步骤:
如果有多个客户端要连接服务器,服务器端可以创建线程来与客户端建立连接,下一节将会将。
示例代码:
TCP客户端编程
示例代码:
运行结果:
UDP编程:
Udp相比TCP就简单多了
UDP服务器编程:
示例代码:
UDP客户端编程:
运行结果:
下一篇介绍python服务器与客户端多线程编程,欢迎关注。