Socket模块相关应用

简介

Socket模块是python在网络应用里面一个很重要的模块,可以用于多远程主机发送命令等相关操作。

Socket即套接字,可以建立相应的套接字并对指定主机地址和端口操作。

创建套接字的采用socket()模块,语法如下:

Socket(socket_family, socket_type, protocol=0)

socket_family可以是AF_UNIX, AF_NETLINK(无连接), AF_INET

socket_type可以是SOCK_STREAM, SOCK_DGRAM

protocol=0 默认为0,一般不填。

例如:

创建TCP/IP的套接字: tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

创建UDP/IP的套接字:udpsocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

AF: Address Family 地址家族

INET internet 

目前python支持的AF有: AF_UNIX, AF_NETLINK(无连接), AF_INET网络编程部分一般采用AF_INET.

 

Socket.SOCK_STREAM socket.SOCK_DGRAM的区别:

Tcp (传输控制协议)面向连接,即面向连接的通讯方式提供了顺序的,可靠的,不会重复的的数据传输协议,每一个需要发送的信息,可能被拆成多份,每一份都不多不少的正确到达目的地,然后重新按顺序装起来,传给正在等待的应用程序。要创建TCP套接字就得在创建socket的时候指定套接字类型为SOCK_STREAM, 该套接字采用Internet协议(IP)来查找网络主机。即IP/TCP协议, IP协议提供了网络主机地址及查找方法,TCP协议利用IP协议的地址信息建立面向该地址的连接。

UDP(用户数据报协议)面向无连接,即无需建立连接就可以通讯。这种连接的可靠性要差一些但是开销少。要创建UDP套接字就得在创建的时候,指定套接字的类型为SOCK_DGRAM. DGRAM: datagram (数据报)

 

Socket常用函数

s.bind(host, port) 绑定地址(主机,端口号)到套接字

s.listen() 开始TCP监听

s.connect(host, port) 主动初始化服务器连接

s.recv() 接收TCP数据

s.send() 发送TCP数据

s.sendall() 完整发送TCP数据

s.sendto() 发送UDP数据

s.getsocketname() 当前套接字的地址

s.getsocketopt() 返回指定套接字的参数

s.setsocketopt() 设置指定套接字的参数

s.close() 关闭套接字

s.settimeout() 设置套接字操作的超时时间

 

代码(用于向远程的主机端口发送命令并取得返回值)

>>> import socket

>>> HostIp = 'hostaddress'

>>> port = portNum

>>> command = 'xxxx'

 

>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

/* create a socket with AF is INET*/

>>> s.connect((HostIp,int(port)))

/*use this socket to connect to your address & port*/

>>> s.send(command+'\r\n')

11

>>> data = s.recv(2048)

>>> s.close()

 

 

你可能感兴趣的:(python)