简介
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()