python socket 编程手记

python socket网络编程 TCP 三次握手是 TCP/IP 协议族中,建立 TCP 连接时使用的一种机制,用于确保通信双方都准备好进行数据传输,并且能够正常接收和发送数据。客户端向服务器发送一个带有 SYN(Synchronize Sequence Numbers)标志位的 TCP 数据包,该数据包中还会包含一个随机生成的序列号seq=x。这个数据包的目的是向服务器表明客户端想要建立一个 TCP 连接,并初始化自己的序列号。服务器接收到客户端的 SYN 包后,会确认客户端的请求。 阅读详情

使用python进行socket编程时,遇到一个问题:

server.py:

>>> import socket
>>> s = socket.socket()
>>> s.bind(('', 12345))
>>> s.listen(5)
>>> s.accept()

client.py:

>>> import socket
>>> s = socket.socket()
>>> s.connect(('', 12345))

报错:

Traceback (most recent call last):
  File "client.py", line 9, in <module>
    s.connect((host, port))
  File "<string>", line 1, in connect
socket.error: (10049, "Can't assign requested address")

google之,在zope讨论区http://zope.org/Collectors/Zope/1728找到一篇帖子,大意是说在windows平台下,socket所绑定的host名称是不可以指定为空字符串的。加个host的名字,问题消失了。将原帖转贴在这里:

Issue 1728 Transcript

= Resolve - Entry #7 by yuppie on May 16, 2005 3:19 pm

 Status: Pending => Resolved

The months-old 2.8 Windows test failures are resolved, so I close this issue. I reopened http://www.zope.org/Collectors/Zope/1507 to track the related ip-address-setting-is-ignored issue.

This is the fix:
http://svn.zope.org/?view=rev&rev=30303
________________________________________
= Comment - Entry #6 by yuppie on May 8, 2005 12:50 pm

@ tim_one: Thanks for these infos. That would explain why ZConfig was changed. But I still believe it was wrong to hardcode a fix for this in ZConfig. Zope 2.7 doesn't have the same problems because it uses an older version of ZConfig.

I propose to discuss this on the related thread on zope-dev and zope3-dev because both products use ZConfig and have similar issues.
________________________________________
= Comment - Entry #5 by tim_one on May 8, 2005 12:25 pm

Well, it's "a Windows problem" because these tests only fail on Windows -- and they only fail in Zope 2.8, not in Zope 2.7; and they only started failing after someone "changed something" to fix Collector 1527 on Linux.

While it seems impossible to know for sure, I suspect the _underlying_ platform difference is that:

socket.connect((host, port))

on Windows blows up if an empty string is passed as `host`, but does not blow up on Linux in that case. For example, in one Python session do:

>>> import socket
>>> s = socket.socket()
>>> s.bind(('', 45454))
>>> s.listen(5)
>>> s.accept()

then in a distinct Python session do:

>>> import socket
>>> s = socket.socket()
>>> s.connect(('', 45454))

On Linux that works. On Windows the connect() attempt barfs like so:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<string>", line 1, in connect
socket.error: (10049, "Can't assign requested address")

I know that, in the past, there have been dozens (and dozens, and ...) of Zope and ZODB and ZRS tests that failed only on Windows because Linux-heads wrote connect() code passing an empty string for the host. So a "never pass an empty string for the host" meme got started. Perhaps it got applied too broadly here (it's fine to pass an empty string for `host` in a bind() call, where it acts like INADDR_ANY:

>>> socket.gethostbyname('')
'0.0.0.0'

on both Linux and Windows).

________________________________________
= Comment - Entry #4 by mhammond on May 8, 2005 8:22 am

I actually don't think this is a "windows" problem as such.

test_config.py says:
# On Linux the default hostname is an empty string, but on Windows
# it's "localhost". So factory.prepare() will replace factory.host
# with "127.0.0.1" only on non-Windows boxes.

In ZConfig.py, we can see code:
        server = HTTPServer.zhttp_server(ip=self.host, ...)
[Note that 'self.ip' also exists, and appears to be the ip when run from the test suite - although self.host is passed for 'ip']

What I think is happening is that on Linux, we have a default IP (127.0.0.1) and no default hostname. On Windows, we have default IP *and* a default hostname ('localhost'). If the user overrides only one, things go wrong.

I expect that a Linux user could provoke the same error by (temporarily) making Linux default the host to 'localhost'. This would at least help people familiar with ZConfig but not Windows to reproduce the error environment.

I have no idea why Zope has a different config default for Windows - if there is an underying Windows issue that requires this, I can't see reference to it.
________________________________________
= Comment - Entry #3 by tim_one on Mar 29, 2005 10:24 am

Understood -- I'm not yelling at you <wink>, I just pointed to the old bug report because it has additional info I didn't want to bother copying over to this one.

ZC has some test machines set aside, but-- alas --no bandwidth so far to set up an automated test runner for Windows. It certainly sucks that test failures can persist for months without such a thing.
________________________________________
= Comment - Entry #2 by ajung on Mar 29, 2005 8:56 am

Yes, I closed the issue because I was not aware of any further problems on windows - especially not because we have no daily testrunner for Windows. (Un)fortunately I don't have a Windows
system here for further testing and debugging.

________________________________________
= Request - Entry #1 by tim_one on Mar 19, 2005 12:38 am

See

http://www.zope.org/Collectors/Zope/1507

for more info. That bug got closed without fixing the Windows problems. Most obvious is that these tests have been failing on Zope trunk since 14 October 2004. Here from current Zope trunk, WinXP Pro SP2, Python 2.3.5:

FAIL: test_http_factory (ZServer.tests.test_config.ZServerConfigurationTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Code/Zope/lib/python/ZServer/tests/test_config.py", line 110, in test_http_factory
    self.assertEqual(server.ip, '127.0.0.1')
  File "C:/Python23/lib/unittest.py", line 302, in failUnlessEqual
    raise self.failureException, /
AssertionError: 'localhost' != '127.0.0.1'

======================================================================
FAIL: test_webdav_source_factory (ZServer.tests.test_config.ZServerConfigurationTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Code/Zope/lib/python/ZServer/tests/test_config.py", line 128, in test_webdav_source_factory
    self.assertEqual(server.ip, '127.0.0.1')
  File "C:/Python23/lib/unittest.py", line 302, in failUnlessEqual
    raise self.failureException, /
AssertionError: 'localhost' != '127.0.0.1'

Python、/C/C++ Socket编程实例 Socket: socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。  在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的 阅读详情

相关推荐

QMT实盘交易入门:5分钟搞定ETF全球配置策略(附完整代码)

本文详细介绍了如何使用QMT平台实现ETF全球配置策略,从环境准备到策略编写、实盘部署全流程仅需5分钟。通过xtquant库对接交易所接口,提供完整的动量轮动策略代码,帮助投资者快速掌握自动交易技术,优化全球资产配置。

weixin_30675247的博客 334

weditor报错wself.wrapped.flush() AttributeError: ‘MockStdout‘ object has no attribute ‘flush‘解决方法

原文地址https://github.com/alibaba/web-editor/issues/131。修改ipyshell-console.py文件,这个文件路径就在报错信息里面。

亚索的博客 2178

SpringBoot集成MinIO依赖冲突问题

场景一: 使用minio8.3.0版本的依赖,报下列异常: An attempt was made to call a method that does not exist. The attempt was made from the following location: io.minio.S3Base.<clinit>(S3Base.java:105) The following method did not exist: okhttp3.Requ...

qq_39974348的博客 1万+

python下模块引入报错:Traceback (most recent call last) 解决办法之使用“国内组件源”

完美解决安装pip第三方组件包的问题

不吃鱼的猫 4384

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

编译原理(东南大学)一:【编译原理期末冲刺救命笔记】速存!看完再上考场稳了!

本文详细介绍了编译原理的核心概念和流程,包括程序设计语言的分类、编译程序的各个阶段(如词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成)以及编译程序生成和构造的基础知识。文章还探讨了编译中的表格管理、出错处理和遍的概念,以及编译基础知识如高级语言、语法规则、字母表和符号串的运算。此外,文中还涉及文法与语言的关系,包括文法的概念、非终结符、终结符、产生式、推导和规约等。整体内容旨在为学习编译原理的学生提供全面的复习资料和考试准备指南。

一位搞嵌入式和前端的genius的博客 1027

python3安装库报错ERROR: Exception: Traceback (most recent call last): File “A:\ProgramData\Anacon

解决了python3安装库的时候的报错问题

Vigo*GIS 3103

数学建模学习(5):最全概率分析之图表绘制详解,内容比较多,建议收藏

(1) 绘制正整数频率使用 tabulate(X) (2)

全栈川川 4591

python3.X程序运行出错 Traceback (most recent call last)ModuleNotFoundError: No module named ‘Crypto‘解决办法

python程序运行出错 Tracebackmost recent call last解决办法 一、问题描述 二、解决方法尝试: 1、首先想到的是安装第三方库Crypto 【此处实践不可行】 2、先卸载Crypto和pycrypto,安装第三方库pycryptodome 【此处实践不可行】 三、最终解决办法【实践可行】 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

小啊呜的博客 2万+

【OpenClaw从入门到精通】第45篇:Skill供应链安全——如何识别并避开恶意技能插件?(2026实测版)

随着OpenClaw生态爆发式增长,全球Skills总量近75万个,日均新增2.1万个,但恶意/问题插件已超600个,数十万用户受影响。本文基于奇安信威胁报告及360安全实践,拆解恶意技能的五大核心特征,提出"安装前三步法"安全审查流程,详解安全技能来源白名单与定期审计方案,并深度解析360龙虾Skill安全超市的分级认证机制。读者可掌握从技能筛选、安装审查到术后审计的全流程安全防护手段,通过实操命令与案例演示,零成本构建Skill供应链安全防线,避免遭遇私钥窃取、资产损失等安全事件。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 561

ArcGIS Pro 3.4 二次开发 - 地理数据库

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下,如何操作地理数据库的多种方法。首先,通过路径打开文件地理数据库,并处理可能出现的异常。其次,使用连接属性或sde文件路径打开企业级地理数据库。此外,还展示了如何从项目项、要素图层中获取地理数据库,以及如何执行SQL语句。最后,文章详细说明了如何从地理数据库中获取单个定义或定义列表,包括表定义、要素类定义、关系类定义和要素数据集定义。这些操作均在后台线程中执行,确保应用程序的响应性。

Winemonk 944

【报错问题】安装weditor报错以及点击Dump Hierarchy时提示 Local server not started, start with $ python -m weditor

这次关于安装使用weditor引起的一系列报错,也是经过以上的各种排查解决,但写这个文章的目的只是记录一下此次发现的问题以及解决方法以供参考交流,以及比较重要的东西:对于开发者的我们来说的比较重要的排查/解决问题的思路,也就是如何看报错信息,怎么分析报错信息——学会利用网络资源来解决问题。

个人沉淀笔记 5031

Python爬虫实战:基于Scrapy与Playwright高效爬取人民网新闻数据

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化工具)高效爬取人民网新闻数据。文章包含完整项目搭建、反反爬策略、数据解析存储以及性能优化等核心内容,提供可直接运行的代码示例,适合中高级Python开发者学习现代网络爬虫开发技术。python# 去除特殊空白字符。

2201_76125261的博客 1118

python之socket编程

Socket是什么呢? socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) 基本上,Socket 是任何一种计算机网络通讯中最基础的内容。例如当你在浏览器地址栏中输入 http://...

mxh的博客 8万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python中Socket编程

目录 Python中Socket编程 1 一、Socket概述 1 二、python中socket模块使用 1 三、socket之聊天室 3 四、socket之端口探测 7 五、scapy之tcp端口探测 11 Python中Socket编程 一、Socket概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket即是一种特殊的文件,socket函数就是对其进行的操作(读/写IO、打

weixin_45794666的博客 3931

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python 中的 Socket 编程入门

Socket 是一个网络编程的接口,提供了网络通信的基础。它使得应用程序能够通过网络互相发送和接收数据。简单来说,Socket 就是一个网络连接的端点,它可以被视作网络通信的“门”,通过它进行数据的发送和接收。Socket 编程是实现网络通信的基础,Python 提供了简单易用的socket模块,方便开发者进行 TCP 和 UDP 通信。通过本文的介绍,你应该对 Python 中的 Socket 编程有了初步的了解。

chusheng1840的博客 2810

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Python进阶——Socket编程

现在的软件开发基本都需要网络通讯。 不管是传统计算机软件,还是手机软件,还是物联网嵌入系统软件,这些都要和其他网络系统进行通讯。 而当今网络世界 基本上 都是使用TCP/IP协议进行通讯的。任何应用,比如 浏览网页、微信、支付宝、抖音 或者我们开发的 等等都是 通过TCP/IP协议进行通讯的。...

欢迎来到我的知识星球!!! 2854

Python网络编程(socket编程)

Win10python - 3.5 Socket工作原理和基本概念       Socket的中文翻译是套接字,它是TCP/IP网络环境下应用程序与底层通信驱动程序之间运行的开发接口,它可以将应用程序与具体的TCP/IP隔离开来,使得应用程序不需要了解TCP/IP的具体细节,就能够实现数据传输。       在网络应用程序中,Socket通信是基于客户端/服务器结构。客户端是发送数据的一方。服务器...

holmehai的博客 1万+

Python Socket网络编程

编程的时候,如果要跟某个IP建立连接,我们需要调用操作系统提供的socket API。socket在操作系统层面,可以理解为一个文件。我们可以对这个文件进行一些方法操作。用listen方法,可以让程序作为服务器监听其他客户端的连接。用connect,可以作为客户端连接服务器。用send或write可以发送数据,recv或read可以接收数据。在建立好连接之后,如果我们想给远端服务发点什么东西,那就只需要对这个文件执行写操作就行了。剩下的发送工作自然就是由操作系统内核来完成了。......

m0_62063669的博客 5126

socket编程python实现

提供一个socket编程的基本概念和实例

zino00的博客 4049

Python Socket 网络编程

Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等。要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,

huayucong的博客 1万+

Python的Socket编程

python socket编程 介绍socket的来源、socket的编程和函数简介

Ryan 2451

python socket编程

上面所讲的只是最基本的socket的编程知识,想要更加深入地学习socket编程,可以学习一下Python自带的socketsserver库源码和http库源码,里面都有很系统的socket编程实现,例如解析http请求和实现多线程多进程处理socket请求以及io多路复用,这对提高自己的socket编程知识将会大有裨益。

weixin_43157245的博客 810

Python----socket编程

基于TCP的套接字编程: socket层的位置:socket在传输层和应用层之间 socket是什么: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解...

一个有深度的博客 3万+

PYTHON 的SOCKET编程简单实现

Socket是什么? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 用图来说明比较直接, Socket 编程: Socket编程也就是面向服务器响应客户端请...

我不想秃头的博客 1457
上一篇: python 浮点
下一篇: 字符串模式匹配之:Sunday算法
unicode1985
博客等级 码龄22年 2粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值