Python学习笔记(4)-- 网络编程(1)-- socket

来源:互联网 发布:电子相册制作软件 编辑:程序博客网 时间:2024/04/30 01:37

1.基本概念

  • Socket(套接字)始于BSD Unix。
  • Socket家族有两种:基于文件系统的和基于网络的。
  • Unix Socket是第一种,基于文件系统的,地址家族表示为:AF_UNIX(或AF_LOCAL)。
  • 网络Socket是基于网络的,地址家族表示为AF_INET(AF_INET6表示ipv6)
  • Python 2.5 中加入了一种 Linux 套接字的支持:AF_NETLINK(无连接[见下])套接字家族让用户代码与内核代码之间的 IPC 可以使用标准 BSD 套接字接口。
  • Python 只支持 AF_UNIX,AF_NETLINK,和 AF_INET 家族。

2.socket中的地址

  • socket地址包括两部分:主机与端口。
  • 主机也就是计算机的IP地址。
  • 端口号就是程序(进程)使用计算机中的某个端口地址。合法的端口号为0-65535,1024以下的端口为Unix系统保留。
  • socket的类型:分为面向连接和无连接两种。

2.1面向链接

  • 通讯之前一定要建立一条连接,面向连接的通讯方式提供了顺序的,可靠的,不会重复的数据传输,而且也不会被加上数据边界。
  • 实现这种连接的主要协议就是传输控制协议(即 TCP),指定套接字类型为 SOCK_STREAM。
  • 套接字使用 Internet 协议(IP)来查找网络中的主机。即TCP/IP协议来支持面向连接套接字。

2.2无连接

  • 无需建立连接就可以进行通讯。
  • 实现这种连接的主要协议就是用户数据报协议(即 UDP) ,指定套接字类型为 SOCK_DGRAM。
  • 套接字使用 Internet 协议来查找网络中的主机。即UDP/IP协议来支持无连接套接字。

3.python中使用Socket

             

3.1部分函数列表  

 

服务器端套接字函数

s.bind()                绑定地址(主机,端口号对)到套接字
s.listen()              开始 TCP 监听
s.accept()           被动接受 TCP 客户的连接,(阻塞式)等待连接的到来

客户端套接字函数

s.connect()        主动初始化 TCP 服务器连接
s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛异常公共用途的套接字函数
s.recv()               接收 TCP 数据
s.send()              发送 TCP 数据
s.sendall()         完整发送 TCP 数据
s.recvfrom()       接收 UDP 数据
s.sendto()          发送 UDP 数据
s.getpeername()    连接到当前套接字的远端的地址
s.getsockname()   当前套接字的地址
s.getsockopt()    返回指定套接字的参数
s.setsockopt()    设置指定套接字的参数
s.close()              关闭套接字

Blocking-Oriented Socket Methods

s.setblocking() 设置套接字的阻塞与非阻塞模式
s.settimeout()a 设置阻塞套接字操作的超时时间
s.gettimeout()a 得到阻塞套接字操作的超时时间

面向文件的套接字的函数

s.fileno()        套接字的文件描述符
s.makefile()    创建一个与该套接字关连的文件

3.2其他模块  

3.2.1SocketServer

3.2.2Twisted

原创粉丝点击