1. 设置套接字选项和值
官方网址:
https://docs.python.org/3/library/socket.html?highlight=setsockopt#socket.socket.setsockopt
函数定义
socket对象.setsockopt(level, optname, value)
参数说明
level:选项所在的协议层
- SOL_SOCKET:套接字层
- SOL_IP:ip层
- SOL_TCP:TCP层
- SOL_UDP:UDP层
optname:选项名
当level为SOL_SOCKET时,有如下选项- SO_BROADCAST 允许发送广播数据,对udp有效 值为0,1(启用)
- SO_REUSERADDR 允许重用本地地址和端口。启用该设置后,服务器端(执行listen()函数后) 可以多次绑定同一端口号(与操作系统有关)。 值为0,1(启用)
- SO_DEBUG 允许调试 值为0/1
- SO_DONTROUTE 禁止通过路由器和网关往外发送信息包。这主要是为了安全而用在以太网上UDP通信的一种方法。不管目的地址使用什么IP地址,都可以防止数据离开本地网络 值为0/1
- SO_KEEPALIVE 保持连接。可以使TCP通信的信息包保持连续性。这些信息包可以在没有信息传输的时候,使通信的双方确定连接是保持的 值为0/1
- SO_OOBINLINE 可以把收到的不正常数据看成是正常的数据,也就是说会通过一个标准的对recv()的调用来接收这些数据 值为0/1
- SO_RCVBUF 接收缓冲区大小 int型值
- SO_SNDBUF 发送缓冲区大小 int型值
- SO_RCVLOWAT 接收缓冲区下限 int型值
- SO_SNDLOWAT 发送缓冲区下限 int型值
当level为SOL_IP时,有如下选项
- IP_HDRINCL 在数据包中包含IP首部
- IP_OPTINOS IP首部选项
- IP_TOS 服务类型
- IP_TTL 生存时间
当level为SOL_TCP时,有如下选项
- TCP_MAXSEG TCP最大数据段的大小
- TCP_NODELAY 不使用Nagle算法
获取套接字选项和值
函数定义
socket对象.getsockopt(level,optname[.buflen])
获取与套接字相关联的文件对象
返回一个与套接字相关联的文件对象。返回的确切类型取决于给makefile()提供的参数。
套接字必须处于 阻塞模式;
可能有超时,但是如果超时发生,文件对象的内部缓冲区可能会以不一致的状态结束。
关闭返回的文件对象makefile()将不会关闭原始套接字,除非所有其他文件对象已关闭并且 socket.close()已在套接字对象上调用
官方链接:https://docs.python.org/3.6/library/socket.html?highlight=socket#socket.socket.makefile
语法
socket.makefile(mode='r', encoding=None)
参数
- mode:与open()函数的mode参数相同,’r’(默认)’w’和’b’,只支持二进制模式
- encoding: 可选,指定编码,如utf-8,省略时采用系统默认编码,windows默认采用GBK编码
返回
返回与套接字相关联的文件对象
可以调用 文件对象 的一些方法,如:readline()
注意:
一般不要调用 读取所有行方法 readlines(),有一些情况,会导致一直读取,比如:当远端程序没有关闭连接时,就会导致一直读取中
例子:
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('www.sohu.com',80))
client.send(b'GET / HTTP/1.1\r\n')
client.send(b'Host: www.sohu.com\r\n')
client.sendall(b'User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36\r\n')
client.send(b'\r\n')
fp=client.makefile(mode='r', encoding='utf-8')
line=fp.readline(1024)
print(fp)
获取计算机名
import socket
hostname=socket.gethostname()
print(hostname)
感谢:
https://www.cnblogs.com/xybaby/p/7341579.html