Python中文
首页
教程
问答
标签
搜索
登录
注册
如何解除阻止的套接字?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>简介: 我的程序偶尔会遇到这样的情况:它想通过一个套接字发送数据,但该套接字被阻塞,等待对以前从未出现的命令的响应。有没有什么方法可以在这种情况下解除对套接字的阻塞并重新使用它?如果不是这样,我怎么能测试插座是否被阻塞,这样我就可以关闭它并打开一个新的?(我首先需要阻塞插座)</p> <p>详细信息: 我通过两个插座连接到服务器。插座1用于总指挥通信。套接字2用于中止正在运行的命令。流产随时都有可能发生。通过套接字1发送的每个命令都会得到一个响应,例如:</p> <pre><code>socket1 send: set command data socket1 read: set command ack </code></pre> <p>在发送和读取之间总是有一段时间,因为服务器在命令执行完成之前不会发送任何内容。在</p> <p>为了中断正在进行的命令,我通过另一个套接字连接并发出一个abort命令。然后我使用socket1发出一个新命令。在</p> <p>我发现,偶尔在中止后通过套接字1发出的命令会挂起程序。套接字1似乎被阻塞,等待对以前发出的命令的响应,该命令从未返回(并且被中断)。虽然它通常是有效的,但有时不起作用(我没有编写服务器)。在</p> <p>在这些情况下,有没有办法让我检查一下套接字1在等待读取时是否被阻塞,如果是,则放弃该读取并继续执行?或者任何检查的方法,这样我就可以关闭插座重新启动了?在</p> <p>谢谢!在</p> <p>更新1:谢谢你的回答。至于我为什么使用阻塞套接字,那是因为我用这个代码控制一台数控机床,我需要知道我要求它执行的命令何时执行完毕。完成后,服务器返回ACK,所以这似乎是一个很好的处理方法。我喜欢对非阻塞进行重构的想法,但我无法想象当命令以其他方式完成时,如何获取信息。我来看看select和其他选项。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>插座应为全双工。如果Python阻止一个线程向套接字写入数据,而另一个线程正在从同一个套接字读取数据,那么我认为这是Python中的一个主要错误。这在我用过的任何其他编程语言中都不会发生。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
8 回答
如何在乒乓球游戏中阻止球
4 回答
如何在乘法和模中不乘空间?
5 回答
如何在乘法和除以2个不同的数字之间进行交换?
1 回答
如何在也是数据一部分的单个字符上拆分大字符串
2 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
3 回答
如何在事件wxWidgets中传递自定义数据
6 回答
如何在事件中使用lambda i=i?
3 回答
如何在事件中心只接收最近的数据
7 回答
如何在事件发生之前保持云函数运行?
10 回答
如何在事件发生后使页面重定向到同一页面
9 回答
如何在事件回调之间保持python生成器的状态
10 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
4 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
9 回答
如何在事件处理程序中访问外部对象?
6 回答
如何在事件循环中将协程打包为正常函数?
9 回答
如何在事件循环之外运行协同程序?
5 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
3 回答
如何在事件文件中只保留一份摘要?
2 回答
如何在事件模板中添加事件
8 回答