博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python网络编程——修改套接字发送和接收的缓冲区大小
阅读量:6318 次
发布时间:2019-06-22

本文共 2377 字,大约阅读时间需要 7 分钟。

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

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 = 409610 11 12 def modify_buff_size():13     # 创建TCP socket14     # 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标记为TRUE27     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]) -> value13 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 a16     string of that length; otherwise it is an integer.17     """18     pass19 后续添加解释

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]: 655362 Buffer size [After] : 4096

 

转载于:https://www.cnblogs.com/ouyangyixuan/p/5894542.html

你可能感兴趣的文章
php引用(&)
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>
命名空间和模块化编程 - C++快速入门39
查看>>
结构化程序设计03 - 零基础入门学习Delphi12
查看>>
D2007在64位Win7出现 delphi 2007 assertion failure thread32.cpp 的解决办法
查看>>
STM32的TAMPER-RTC管脚作为Tamper的使用[转]
查看>>
[记]一个逐步“优化”的范例程序
查看>>
2012-01-09_2
查看>>
数学 - 线性代数导论 - #5 矩阵变换之置换与转置
查看>>
java数据结构:队列
查看>>
使用.NET进行高效率互联网敏捷开发的思考和探索【一、概述】
查看>>
切换默认Activity和Fragment的动画
查看>>
SSM练习——登录实现
查看>>
asp.net core 2.0 Microsoft.Extensions.Logging 文本文件日志扩展
查看>>