Python的socket模块

前言

在网络编程中的一个基本组件就是套接字(socket)。套接字主要是两个程序之间的信息通道。程序可能分布在不同的计算机上通过套接字互相发送信息。在Python中的大多数的网络编程都隐藏了socket模块的基本细节,并且不直接和套接字交互。

套接字


套接字包括两个:服务器套接字客户机套接字
创建一个服务器套接字后,让它等待连接。这样它就在某个网络地址处监听。
处理客户端套接字比处理服务器套接字简单,因为服务器套接字必须准备随时处理客户端的连接,同时还要处理多个连接,而客户机只是地连接,完成事务,断开连接。

套接字格式


一个套接字就是一个socket模块中的socket类实例。它实例化需要三个参数:第一个参数是地址族(默认是socket.AF_INET);第二个参数是流(socket.SOCK_STREAM,默认值,for TCP)或者数据报(socket.SOCK_DGRAM,for UDP)套接字;第三个参数是使用的协议(默认是0)

服务器套接字&客户机套接字


  • 服务器套接字使用bind(绑定服务器主机ip,如果有多个网卡,就可以绑定多个ip)方法后,再调用listen方法去监听这个给定的地址。
  • 客户端套接字使用connect方法连接服务器,在connect方法中使用的地址与bind方法中的地址相同(在服务器,能实现很多功能,比如使用socket.gethostname得到当前的主机名)。
  • 服务器套接字开始监听后,它就可以接受客户端的连接。这个步骤用accept方法来完成,这个方法会阻塞线程直到客户端连接,然后该方法就返回一个格式为(client,address)的元组,client是一个客户机套接字,address是一个前面解释过的地址。服务器能处理客户端到它满意的程度,然后调用另一个accept方法开始等待下一个连接。这个过程通常是在无线循环中使用。

套接字方法(send&recv)


套接字方法send和recv方法的状态有阻塞与非阻塞两种状态。默认状态是阻塞模式

  • 阻塞模式
    在阻塞模式下send操作将会等待所有数据均被拷贝到发送缓冲区后才会返回,等待!
    在阻塞模式下,recv会一直阻塞到接收缓冲区里有一个字节或一个完整的UDP数据报为止,然后再返回,等待!
  • 非阻塞模式
    在非阻塞模式下send操作会立即返回,不等待!
    在非阻塞模式下,recv会立即返回,不等待!

你可能感兴趣的:(python)