Python 错误 OSError: [WinError 10038] an Operation Was Attempted on Something That Is Not a Socket
通过这篇文章,我们将了解什么是服务器和客户端,以及如何使用套接字模块在服务器和客户端的帮助下创建应用程序。 我们还将学习如何在使用 Python 制作这些类型的应用程序时避免错误。
借助 Python 中的 socket 模块无错误创建应用程序
在互联网上,节点可以是服务器也可以是客户端; 当然,它也可以是一个客户端到客户端的网络,你拥有所有的节点并且正在相互交谈。 它是一个点对点网络。
我们在互联网上有服务器监听客户端,他们正在等待客户端发送请求。
例如,当您访问 百度 服务器 baidu.com 并向 百度 服务器发送请求时,百度 服务器将向您发送一些响应,即页面或页面未找到消息。
让我们从创建两个 Python 文件开始,demo.py 和 client.py。 我们要将消息从服务器发送到客户端。
服务器和客户端可以来自不同的位置或网络外部。
我们将创建服务器,然后我们将传递一条消息并查看此客户端如何从服务器接收消息。 为简单起见,我们在本地主机上执行此操作,但您也可以在不同的系统上执行此操作。
我们需要做的第一件事是导入套接字并创建一个实例。 我们将调用套接字类,然后指定套接字系列。
套接字系列将是 AF_INET,套接字公式将是 SOCK_STREAM。
在下一步中,我们需要使用 bind()
方法将套接字绑定到端口上的主机名。 现在,我们必须使用 listen()
方法监听连接; 最大连接数为 5。
import socket
SKT=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
SKT.bind((socket.gethostname(),6060))
SKT.listen(5)
为了找到与客户端的连接,我们从服务器发送一条消息,以便客户端接收该消息。
为此,我们将使用 True 的 while 循环。 在这个循环中,我们将使用 connect()
方法创建另一个套接字作为客户端套接字; 它将在 client.py 文件中使用。
我们正在使用返回两个值的 accept()
方法; 这就是为什么我们声明了两个变量来存储传入套接字和传入连接的地址。 现在,我们将打印一条消息,显示已从指定地址建立连接。
while True:
Client_Socket,Adress=SKT.accept()
print(f'Connection has been established from {Adress}')
现在我们需要以字节为单位发送消息。 编码将是 utf-8,发送到与套接字连接的每个客户端。
Client_Socket.send(bytes("Welcome to the server!!!","utf-8"))
Client_Socket.close()
我们的套接字已准备好监听连接。 现在我们将在 client.py 文件中工作并使用相同的代码,除了 connect()
方法。
在 connect()
方法中,我们将使用相同的主机名、本地主机和端口。
现在,我们将接收来自服务器的消息。 我们将使用 recv()
方法并将其传递给 2048 字节。
我们将打印出此消息以验证消息是否已收到。
import socket
SKT=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
SKT.connect((socket.gethostname(),6060))
MSG=SKT.recv(2048)
print(f"Message has been received {MSG}")
现在,应用程序已经完成,所以我们将首先运行服务器,即 demo.py 文件; 它正在运行,但什么也没发生。 如果我们转到 client.py 并在交互式窗口中运行该文件,当这些文件同时运行时,我们可以在控制台中看到响应。
Python 错误 OSError: [WinError 10038] An operation was attempted on something that is not a socket
创建此应用程序时出现错误的一些常见原因。 一个原因可能是您忘记运行一个文件,两个文件,或者您在任何地方都犯了错误。
让我们看一个用户经常遇到此错误的示例。
import socket
SKT=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
SKT.bind((socket.gethostname(),6060))
SKT.listen(5)
while True:
Client_Socket,Adress=SKT.accept()
while True:
print(f'Connection has been established from {Adress}')
Client_Socket.send(bytes("Welcome to the server!!!","utf-8"))
Client_Socket.close()
输出:
OSError: [WinError 10038] An operation was attempted on something that is not a socket
这是因为我们正在运行一个嵌套的 while 循环,并且两者都是 True。 当执行外部 while 循环时,我们接受来自客户端的传入连接。
问题发生在执行内部 while 循环时。
由于内部 while 循环第一次为 True,因此该循环完美执行,但在第二次迭代中,while 循环需要接受传入连接。 accept() 方法从外循环调用,永远不会被调用; 这就是它发现套接字不再存在的原因。
出现问题的另一个原因是当您从终端运行这两个文件时。 如果您使用 VS 代码,请在(交互式窗口中的当前文件)中单独运行这两个文件。
完整的 demo.py 文件代码:
import socket
SKT=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
SKT.bind((socket.gethostname(),6060))
SKT.listen(5)
while True:
Client_Socket,Adress=SKT.accept()
print(f'Connection has been established from {Adress}')
Client_Socket.send(bytes("Welcome to the server!!!","utf-8"))
Client_Socket.close()
相关文章
Python 中错误 NameError: Name 'xrange' Is Not Defined
发布时间:2023/05/30 浏览次数:74 分类:Python
-
我们将了解在 Python3 中调用 xrange 函数时出现错误的原因,并了解如何解决此问题。 我们还将了解 range 和 xrange 之间的区别,并了解如何在不同的 Python 版本中使用 range 函数。
Python 错误 Fatal Python Error: Py_Initialize Unable to Load the File System Co
发布时间:2023/05/30 浏览次数:147 分类:Python
-
在本文中,我们将学习如何解决在代码执行期间发生的致命 python 错误。Python 错误 Fatal Python error: Py_Initialize: unable to load the file system codec
Python 错误 WebDriverException: Message: Geckodriver Executable Needs to Be in
发布时间:2023/05/30 浏览次数:187 分类:Python
-
本教程将讨论Python中错误 Message: 'geckodriver' executable needs to be in PATH。geckodriver 是 Mozilla 开发的浏览器引擎,充当 Selenium 和 Firefox 浏览器之间的链接。
Python 错误 Valueerror: Expected 2d Array, Got 1d Array Instead
发布时间:2023/05/30 浏览次数:103 分类:Python
-
当我们在 numpy 中传递一维数组而不是二维数组时,会发生错误 ValueError: Expected 2D array, got 1D array instead 。如您所知,每种编程语言都会遇到很多错误,有些是在运行时,有些是在编译时。 Pyth
解决 Python中错误 TypeError: Not All Arguments Converted During String Forma
发布时间:2023/05/30 浏览次数:138 分类:Python
-
模 (%) 运算符就是其中一种方法。 它是 Python 中最古老的字符串格式化方法之一,以错误的方式使用它可能会导致 TypeError: not all arguments converted during string formatting。
解决 Python中 TypeError: Nonetype Object Is Not Subscriptable 错误
发布时间:2023/05/30 浏览次数:162 分类:Python
-
在本文中,我们将讨论为什么 TypeError: NoneType object is not subscriptable 在 Python 中出现以及如何修复它。 我们将学习如何对序列数据类型错误地使用 append()、sort() 和 reverse() 等方法导致
解决 Python中错误 AttributeError: 'Nonetype' Object Has No Attribute 'Group'
发布时间:2023/05/30 浏览次数:68 分类:Python
-
Python 正则表达式(regex)匹配并提取一串特殊字符或模式。 在 Python 中,当我们的正则表达式无法匹配指定的字符串时,会出现 AttributeError: 'NoneType' object has no attribute 'group' 错误。在本文中,我
Python 中错误 ValueError: Invalid Literal for Float()
发布时间:2023/05/17 浏览次数:55 分类:Python
-
Python 中 ValueError: invalid literal for float()。 float() 函数无法将字符串类型转换为浮点数。 相反,它会抛出一个 ValueError,它可能会因您的 Python 版本而异。
Python 错误 TypeError: Unhashable Type: List
发布时间:2023/05/17 浏览次数:112 分类:Python
-
本文将讨论 TypeError: unhashable type: 'list' 以及如何在 Python 中修复它。因为 Python 字典只接受可散列数据类型作为它们的键,而列表是不可散列的。