Python中文
首页
教程
问答
标签
搜索
登录
注册
Python-UDP客户端/服务器程序,问题
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在尝试编写一个基本的客户机/服务器echo程序,以测试基于select()的重传计时器的使用情况(尽管当它不能按预期工作时,我不得不注释掉该位以简化调试)。以下是相关代码片段:</p> <p>服务器:</p> <pre><code>from socket import * import sys import select address = ('localhost', 6005) server_socket = socket(AF_INET, SOCK_DGRAM) server_socket.bind(address) while(1): print "Listening" recv_data, addr = server_socket.recvfrom(2048) print recv_data if recv_data == "Request 1" : print "Received request 1" server_socket.sendto("Response 1", address) elif recv_data == "Request 2" : print "Received request 2" data = "Response 2" server_socket.sendto(data, address) </code></pre> <p>客户:</p> <pre><code>from socket import * import sys import select address = ('localhost', 6005) client_socket = socket(AF_INET, SOCK_DGRAM) num_retransmits = 0 while(num_retransmits < 60): num_retransmits = num_retransmits + 1 data = "Request 1" client_socket.sendto(data, address) print "Sending request 1" recv_data, addr = client_socket.recvfrom(2048) print recv_data, "!!" </code></pre> <p>客户机上的输出只是“发送请求1”,当在recvfrom调用处或其下方的任何地方使用断点时,它都不会到达断点。所以我认为客户没有收到任何东西,并坚持到收到为止。另一方面,服务器上的输出是:</p> <ul> <li>倾听</li> <li>请求1</li> <li>收到请求1</li> <li>倾听</li> <li>响应1</li> </ul> <p>等等等等</p> <p>在第一个循环之后,服务器再次循环并打印响应1。这意味着服务器所做的是接收请求1,向客户端发送响应1,循环。。。但在第二次循环之后,响应1仍在其套接字中!这就是为什么当它打印recv_数据时,它会打印响应1。另一方面,客户机没有打印recv_数据,因为客户机没有收到它-它仍然在服务器套接字的缓冲区中。</p> <p>请帮助-我试过查看其他echo程序,但它们似乎都使用TCP,而且相当简单(我想我几乎遵循了相同的步骤)。我不知道为什么我的UDP程序不能工作。我试图查看sendall()调用,但它似乎只适用于TCP。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>可能是服务器端的10号线</p> <blockquote> <p>recv_data, addr = server_socket.recvfrom(2048)</p> </blockquote> <p>应该是</p> <blockquote> <p>recv_data, addr = server_socket.sendto(2048)</p> </blockquote> <p>是吗?</p> <p>我是个傻瓜。=P</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在乒乓球比赛中预测球的轨迹,对于AI球拍预测?
5 回答
如何在乒乓球游戏中阻止球
1 回答
如何在乘法和模中不乘空间?
6 回答
如何在乘法和除以2个不同的数字之间进行交换?
6 回答
如何在也是数据一部分的单个字符上拆分大字符串
9 回答
如何在乾草堆中找到針,有更好的解決方案嗎?
9 回答
如何在事件wxWidgets中传递自定义数据
2 回答
如何在事件中使用lambda i=i?
5 回答
如何在事件中心只接收最近的数据
3 回答
如何在事件发生之前保持云函数运行?
4 回答
如何在事件发生后使页面重定向到同一页面
6 回答
如何在事件回调之间保持python生成器的状态
8 回答
如何在事件处理程序(pythonsocket、sphinx)中保留docstring
4 回答
如何在事件处理程序中更改wxRichTextCtrl的光标位置?
4 回答
如何在事件处理程序中访问外部对象?
2 回答
如何在事件循环中将协程打包为正常函数?
8 回答
如何在事件循环之外运行协同程序?
4 回答
如何在事件循环结束时为并发未来的所有线程调用类方法?
7 回答
如何在事件文件中只保留一份摘要?
9 回答
如何在事件模板中添加事件
8 回答