socket&socketserver网络编程

1、套接字与套接模块

套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。
套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳。许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持。
三种最流行的套接字类型是:stream,datagram和raw。stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议。但套接字并不限于TCP/IP。

套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问。使用该模块可以实现客户机和服务器套接字。要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块。利用该模块包含的函数和类定义,可生成通过网络通信的程序。

python提供了两个级别访问的网络服务:

  • 低级的网络服务支持基本的socket,它提供了标准的BSD sockets API,可以访问底层操作系统socket接口的全部方法
  • 高级别的网络服务模块socketServer,它提供了服务器中心类,可以简化网络服务器的开发

2、socket模块方法

socket.socketfamily = AF_INETtype = SOCK_STREAMproto = 0fileno = None )  :使用给定的地址系列,套接字类型和协议号创建一个新套接字

socket.socketpairfamily [,type [,proto ):使用给定的地址系列,套接字类型和协议编号构建一对连接的套接字对象

socket.create_connectionaddress [,timeout [,source_address ):连接到侦听Internet 地址(2元组 )的TCP服务,然后返回套接字对象

socket.fromfdfdfamilytypeproto = 0 ):复制文件描述符fd(由文件对象的fileno()方法返回的整数 ),并从结果中构建一个套接字对象

socket.fromsharedata):从该socket.share() 方法获得的数据实例化一个套接字。假设套接字处于阻塞模式。

socket.SocketType:这是表示套接字对象类型的Python类型对象。这是一样的type(socket(...))

socket.getaddrinfohostportfamily = 0type = 0proto = 0flags = 0 ):将主机 / 端口参数转换为5元组序列,其中包含创建连接到该服务的套接字的所有必要参数

socket.getfqdnname ):为名称返回完全限定的域名。如果名称被省略或为空,则被解释为本地主机

socket.gethostbynamehostname):将主机名转换为IPv4地址格式。IPv4地址以字符串形式返回

socket.gethostbyname_exhostname):将主机名转换为IPv4地址格式,扩展接口。返回一个triple ,其中主机名是响应给定ip_address的主要主机名,aliaslist是同一地址的备用主机名(可能为空)列表,ipaddrlist是同一主机上同一接口的IPv4地址列表经常但不总是一个地址)。不支持IPv6名称解析,应该用于IPv4 / v6双栈支持

socket.gethostname):返回包含Python解释器当前正在执行的机器的主机名的字符串

socket.gethostbyaddrip_address ):返回一个triple ,其中hostname是响应给定ip_address的主要主机名,aliaslist是同一地址的备用主机名(可能为空)列表, ipaddrlist是同一个接口的IPv4 / v6地址列表主机(最有可能只包含一个地址)。要找到完全限定的域名,请使用该功能。支持IPv4和IPv6

socket.getnameinfosockaddrflags ):将套接字地址sockaddr翻译成2元组。根据标志的设置,结果可以在主机中包含完全限定的域名或数字地址表示。同样,端口可以包含字符串端口名称或数字端口号。(host, port)

socket.getprotobynameprotocolname ):将Internet协议名称(例如,'icmp')转换为适合作为(可选)第三个参数传递给该socket() 函数的常量。这通常只需要以“原始”模式(SOCK_RAW)打开的套接字; 对于正常的套接字模式,如果协议被省略或为零,则自动选择正确的协议

socket.getservbynameservicename [,protocolname ):将Internet服务名称和协议名称转换为该服务的端口号。可选的协议名称,如果有,应该是'tcp'或 'udp',否则任何协议将匹配

socket.getservbyportport [,protocolname ):将Internet端口号和协议名称转换为该服务的服务名称。可选的协议名称,如果有,应该是'tcp'或 'udp',否则任何协议将匹配

socket.ntohl):将32位正整数从网络转换为主机字节顺序。在主机字节顺序与网络字节顺序相同的机器上,这是无操作的; 否则,它会执行一个4字节的交换操作。

socket.ntohs):将16位正整数从网络转换为主机字节顺序。在主机字节顺序与网络字节顺序相同的机器上,这是无操作的; 否则,它执行一个2字节的交换操作

socket.htonl)将32位正整数从主机转换为网络字节顺序。在主机字节顺序与网络字节顺序相同的机器上,这是无操作的; 否则,它会执行一个4字节的交换操作。
socket.htons)将16位正整数从主机转换为网络字节顺序。在主机字节顺序与网络字节顺序相同的机器上,这是无操作的; 否则,它执行一个2字节的交换操作

socket.inet_atonip_string ):将IPv4地址从点分四字符串格式(例如“123.45.67.89”)转换为32位打包二进制格式,作为长度为4个字符的字节对象。当与使用标准C库的程序进行交谈并且需要类型对象

socket.getdefaulttimeout():返回新套接字对象的默认超时值(秒)(float)。值None表示新的套接字对象没有超时。首次导入套接字模块时,默认为None。

socket.setdefaulttimeout(timeout):为新的套接字对象设置默认的超时值(秒)(float)。首次导入套接字模块时,默认为None。请参阅 settimeout()可能的值和它们各自的含义。

socket.sethostname(name):将机器的主机名称设为名称。OSError如果你没有足够的权利,这将会提高 。

socket.if_nameindex():返回网络接口信息列表(index int,name string)元组。 OSError如果系统调用失败。

socket.if_nametoindex(if_name ):返回接口名称对应的网络接口索引号。 OSError如果没有给定名称的接口存在。

socket.if_indextoname(if_index ):返回接口索引号对应的网络接口名称。 OSError如果没有给定索引的接口存在。

3、socket链接

posted @ 2018-07-25 01:33  咕咚!  阅读(210)  评论(0编辑  收藏  举报