Python--套接字

来源:互联网 发布:linux os update 编辑:程序博客网 时间:2024/04/30 01:32

套接字

  套接字是计算机网络数据结构。在任何类型的通信开始前,网络应用程序必须创建套接字。

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

  UNIX套接字是我们所讲的套接字的第一个家族,并且拥有一个”家族名字“AF_UNIX,它代表地址家族(address family):UNIX。其他比较旧的系统可能会将地址家族表示成域(domain)或协议家族(protocol family),并使用其缩写PF而非AF。
  第二种类型的套接字是基于网络的,它也有自己的家族名字AF_INET,或者地址家族:因特网。另一个地址家族AF_INET6用于IPv6寻址。在所有的地址家族中,目前AF_INET是使用最广泛的。
  python2.5中引入了对特殊类型的Linux套接字的支持。套接字的AF_NETLINK家族允许使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC(Inter-Process Communication,进程间通信)
针对Linux的另一种特性(python2.6中新增)就是支持透明的进程间通信(TIPC)协议。TIPC允许计算机集群之中的机器相互通信,而无须使用基于IP的寻址方式。python对TIPC的支持以AF_TIPC家族的方式呈现。
  总的来说,python只支持AF_UNIX、AF_NETLINK、AF_TIPC和AF_INET家族。在本章剩余的大部分内容中,我们将使用AF_INET。

面向连接的套接字和无连接的套接字

1.面向连接的套接字

  不管你采用哪种地址家族,都有两种不同风格的套接字连接。
面向连接的通信提供序列化、可靠的和不重复的数据交付,每条消息可以拆分成多个片段,并且每一条消息片段都能确保能够到达目的地。实现这种连接类型的主要协议是传输控制协议(TCP),为了创建TCP套接字,必须使用SOCK_STREAM作为套接字类型。

2.无连接的套接字

  在通信开始之前不需要建立连接。在数据传输过程中并无法保证它的顺序、可靠性或重复性。实现这种连接类型的主要协议是用户数据报协议(UDP),为了创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型

3.Python中的网络编程

  要创建套接字,必须使用socket.socket()函数,它一般的语法如下:
  socket(socket_family,socket_type,protocol=0)
  其中,socket_family是AF_UNIX或AF_INET,socket_type是SOCK_STREAM或SOCK_DGRAM。protocol通常省略,默认为0.

原创粉丝点击