套接字,TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。
它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
在python中使用socket模块来对套接字进行处理。
(1)套接字超时时间
import socket
# 创建套接字
#流式套接字(SOCK_STREAM):流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流式套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 输出默认套接字超时时间
print("before time is :",s.gettimeout())
# 修改套接字超时时间
s.settimeout(10)
print("after time is :",s.gettimeout())
输出结果:
before time is : None
after time is : 10.0
settimeout()函数的参数可以是秒数(非负浮点数)或者None。这个方法在处理阻塞式套接字操作时使用,如果把超时时间设置为None,则禁用了套接字的超时检测。
(2)修改套接字发送和接收的缓冲区大小
import socket
SEND_BUF_SIZE = 4096
RECV_BUF_SIZE = 4096
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 查看原来的缓冲区大小
sendbufsize_before = s.getsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF)
recvbufsize_before = s.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
print("before send buf size is ",sendbufsize_before)
print("before recv buf size is ",recvbufsize_before)
# 修改缓冲的大小
s.setsockopt(socket.SOL_TCP,socket.TCP_NODELAY,1)
s.setsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF,SEND_BUF_SIZE)
s.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,RECV_BUF_SIZE)
# 查看修改后的缓冲区大小
sendbufsize_after = s.getsockopt(socket.SOL_SOCKET,socket.SO_SNDBUF)
recvbufsize_after = s.getsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF)
print("before send buf size is ",sendbufsize_after)
print("before recv buf size is ",recvbufsize_after)