Python网络编程——修改套接字发送和接收的缓冲区大小

很多情况下,默认的套接字缓冲区大小可能不够用。此时,可以将默认的套接字缓冲区大小改成一个更合适的值。

1. 代码

 1 # ! /usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 import socket
 5
 6 # 设置发送缓冲域大小
 7 SEND_BUF_SIZE = 4096
 8 # 设置接收缓冲域大小
 9 RECV_BUF_SIZE = 4096
10
11
12 def modify_buff_size():
13     # 创建TCP socket
14     # UDP socket —— s=socket.socket(socket.AF_INET,SOCK_DGRAM)
15     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
16
17     # 获取当前套接字关联的选项
18     # socket.SOL_SOCKET —— 正在使用的socket选项
19     # socket.SO_SNDBUF —— 发送缓冲区大小
20     bsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
21     #打印更改前的发送缓冲区大小
22     print("Buffer size [Before]: %d" % bsize)
23
24     # 设置TCP套接字关联的选项
25     # socket.TCP_NODELAY TCP层套接口选项
26     # 1 —— 表示将TCP_NODELAY标记为TRUE
27     sock.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
28
29     # 设置发送缓冲域套接字关联的选项
30     sock.setsockopt(
31         socket.SOL_SOCKET,
32         socket.SO_SNDBUF,
33         SEND_BUF_SIZE)
34
35     # 设置接收缓冲域套接字关联的选项
36     sock.setsockopt(
37         socket.SOL_SOCKET,
38         socket.SO_RCVBUF,
39         RECV_BUF_SIZE)
40
41     # 获取设置后的发送缓冲域
42     bsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
43     print("Buffer size [After] : %d" % bsize)
44
45 if __name__ == ‘__main__‘:
46     modify_buff_size()

2.setsockopt()和getsockopt()

 1 def setsockopt(self, level, option, value):  # real signature unknown; restored from __doc__
 2     """
 3     setsockopt(level, option, value)
 4
 5     Set a socket option.  See the Unix manual for level and option.
 6     The value argument can either be an integer or a string.
 7     """
 8     pass
 9
10 def getsockopt(self, level, option, buffersize=None):  # real signature unknown; restored from __doc__
11     """
12     getsockopt(level, option[, buffersize]) -> value
13
14     Get a socket option.  See the Unix manual for level and option.
15     If a nonzero buffersize argument is given, the return value is a
16     string of that length; otherwise it is an integer.
17     """
18     pass
19 后续添加解释

3.AF_INET和SOCK_STREAM解释

1 socket.AF_INET —— 服务器之间网络通信
2 socket.SOCK_STREAM提供有序的、可靠的、双向的和基于连接的字节流,使用带外数据传送机制,为Internet地址族使用TCP。
3 SOCK_STREAM类型的套接口为全双向的字节流。对于流类套接口,在接收或发送数据前必需处于已连接状 态。用connect()调用建立与另一套接口的连接,连接成功后,即可用send()和recv()传送数据。当会话结束后,调用closesocket()。带外数据根据规定用send()和recv()来接收。

4.运行结果

1 Buffer size [Before]: 65536
2 Buffer size [After] : 4096
时间: 2024-11-10 01:28:08

Python网络编程——修改套接字发送和接收的缓冲区大小的相关文章

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

Python网络编程—socket套接字编程(TCP)

套接字介绍 1.套接字 : 实现网络编程进行数据传输的一种技术手段 2.Python实现套接字编程:import socket 3.套接字分类 流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案.(面向连接--tcp协议--可靠的--流式套接字) 数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案.(无连接--udp协议--不可靠--数据报套接字) tcp套接字 服务端流程 1.创建套接字 sockfd=socket.socket

Python网络编程—socket套接字编程(UDP)

套接字介绍 1.套接字 : 实现网络编程进行数据传输的一种技术手段 2.Python实现套接字编程:import socket 3.套接字分类 流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案.(面向连接--tcp协议--可靠的--流式套接字) 数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案.(无连接--udp协议--不可靠--数据报套接字) UDP套接字编程 服务端流程 1.创建数据报套接字 sockfd = socket

Python网络编程——处理套接字错误

在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应. Python的Socket库提供了一个方法,能通过socket.error异常优雅地处理套接字错误. 1. 代码及相关解释 1 # ! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # 处理套接字错误 4 5 import argparse 6 # python用于解析命令行参数和选项的标准模块 7 import sys 8 import socket

Python网络编程—UDP套接字广播

广播定义 : 一端发送多点接收 广播地址 : 每个网络的最大地址为发送广播的地址,向该地址发送,则网段内所有主机都能接收. """ 创建udp套接字 设置套接字可以接收广播 选择接收端口 """ from socket import * s=socket(AF_INET,SOCK_DGRAM) #让套接字接收广播 s.setsockopt(SOL_SOCKET,SO_BROADCAST,1) s.bind(("0.0.0.0"

Python网络编程—TCP套接字之HTTP传输

HTTP协议 (超文本传输协议) 1.用途 : 网页获取,数据的传输 2.特点: 应用层协议,传输层使用tcp传输 简单,灵活,很多语言都有HTTP专门接口 无状态,协议不记录传输内容 http1.1 支持持久连接,丰富了请求类型 3.网页请求过程 客户端(浏览器)通过tcp传输,发送http请求给服务端 服务端接收到http请求后进行解析 服务端处理请求内容,组织响应内容 服务端将响应内容以http响应格式发送给浏览器 浏览器接收到响应内容,解析展示 HTTP请求(request) 1.请求行

TCP/IP网络编程之套接字类型与协议设置

套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为"计算机间对话必备通信规则" 在TCP/IP网络编程之网络编程和套接字这一章中,我们已经介绍了如何创建套接字,但为了完全理解该函数,此处将继续展开讨论 #include <sys/socket.h> int socket(int domain, int type, int pr

Linux网络编程——原始套接字实例:简单版网络数据分析器

通过<Linux网络编程--原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 MAC 头部(有线局域网) 注意:CRC.PAD 在组包时可以忽略 链路层数据包的其中一种情况: unsigned char msg[1024] = { //--------------组MAC--------14------ 0xb8, 0x88, 0xe3, 0xe1, 0x10, 0xe6, // dst

Linux网络编程——原始套接字实例:MAC 头部报文分析

通过<Linux网络编程——原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 MAC 头部(有线局域网) 注意:CRC.PAD 在组包时可以忽略 链路层数据包的其中一种情况: 1 unsigned char msg[1024] = { 2 //--------------组MAC--------14------ 3 0xb8, 0x88, 0xe3, 0xe1, 0x10, 0xe6,