- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用两台不同的计算机,我必须实现发送方和接收方算法来发送和接收帧。我是一名实力雄厚的程序员,但对网络编程和 python 相对较新。算法如下。
发件人站点算法:
while(true)
{
WaitForEvent();
if(Event(RequestToSend))
{
GetData();
MakeFrame();
SendFrame();
}
接收端算法:
while(true)
{
WaitForEvent();
if(Event(ArrivalNotification))
{
ReceiveFrame();
ExtractData();
DeliverData();
}
我必须在两台独立的计算机上实现这些算法,一台作为发送方,另一台作为接收方。我不知道从哪里开始或寻找例子。我做了一些研究,但运气不佳。如果有人可以提供示例代码或一篇关于实现此功能的好文章,那将会有很大的帮助。
最佳答案
我发现自己使用Python的Socket Server例子。这将使您继续SendFrame()
, ReceiveFrame()
,和DeliverData()
例程。
MakeFrame()
和ExtractData()
,将根据您需要来回发送的数据量而有很大差异。我会尝试挖掘一些我过去使用过的好例子。
如果您正在寻找一站式解决方案,我建议您查看 Twisted 。它有一个明确的学习曲线,但对您来说可能是值得的。请注意,如果您想使用 pyInstaller
将 Python 代码打包成 exe或py2exe
,根据我读过的一些主题,Twisted 可能会给您带来麻烦。
因此,在回顾我的笔记后,框架方面对我来说是一个痛苦的话题,因为我找不到任何好的例子来提供帮助。相反,我从头开始编写了一个并已经(并且仍然)对其进行了调整。
当您阅读套接字编程时,您肯定会发现,仅仅因为您发送了所有数据( socket.sendall()
)并不意味着您会在第一个 socket.recv()
之后收到所有数据。 。这增加了消息框架问题的复杂性。由于网络上缺乏示例,下面我有一个我现在在几个流程中使用的精简版本。
更新
因此,在进一步测试欠重/突发之后,我放弃了正则表达式并逐个字符地处理流,这极大地提高了其性能。
SendFrame()
, ReceiveFrame()
, ExtractData()
, DeliverData()
示例:
MESSAGE_FRAME_START = '@'
MESSAGE_FRAME_END = '#'
def process_raw_socket_message_stream(raw_message_stream):
message_list = []
cmd = ''
last_footer_idx = message_string.rfind(MESSAGE_FRAME_END)
cmd_str_len = len(message_string)
byte_cnt = 0
while (byte_cnt <= last_footer_idx):
cmd_chr = message_string[byte_cnt]
cmd += cmd_chr
if cmd_chr == MESSAGE_FRAME_START:
cmd = MESSAGE_FRAME_START
elif cmd_chr == MESSAGE_FRAME_END:
message_list.append(cmd)
byte_cnt += 1
# Remove the parsed data
if last_footer_idx > 0:
message_string = message_string[last_footer_idx+1:]
return message_list, message_string
def add_message_frames(unframed_message):
return MESSAGE_FRAME_START + unframed_message + MESSAGE_FRAME_END
def remove_message_frames(framed_message):
clean_message = framed_message.lstrip(MESSAGE_FRAME_START)
clean_message = clean_message.rstrip(MESSAGE_FRAME_END)
return clean_message
def process_messsage(clean_message):
# Do what needs to be done
pass
def send_data(mysocket, payload):
framed_payload = add_message_frames(payload)
mysocket.sendall(framed_payload)
def receive_data(mysocket, byte_size=1024):
data = ''
while(1):
try: # Wait for data
data += mysocket.recv(byte_size)
if(data != '') and (data != None):
# Decode all messsages
message_list, remaining_data = process_raw_socket_message_stream(data)
# Process all of the messages
for messsage in message_list:
process_messsage(remove_message_frames(message))
# Store the remaining data
data = remaining_data
except:
print "Unexpected Error"
关于python - 用python实现 "Simplest Protocol"伪代码算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272630/
我希望制作最简单的内容 slider 。 我不需要插件...我只是想要一种简单的方法来根据下一个/上一个按钮左右滑动几个 div。 不过,如果我搬起石头砸自己的脚,我只会使用插件。 :) 最佳答案 我
我正在尝试完成碰撞检测。我没有使用 OpenGl,我使用的是 canvas/surfaceview。 我有 2 个位图。到目前为止,这是我得出的结论: public boolean inBounds(
我想得到 Hy! 在 Hylang 中,我如何执行简单的 Python 循环: for i in range(5): print(i) 最佳答案 tutorial提供了这个例子: (for [
使用两台不同的计算机,我必须实现发送方和接收方算法来发送和接收帧。我是一名实力雄厚的程序员,但对网络编程和 python 相对较新。算法如下。 发件人站点算法: while(true) { W
我正在尝试做一个非常简单的 UINavigationController 示例。这是我的代码: - (void)viewDidLoad { [super viewDidLoad]; 下一行有效,或
我正在构建一个 NodeJS 应用程序,可以将 URL 存储在数据库中。我想使用 URL 作为主键,以避免存储重复项。为了做到这一点,我需要 url 尽可能采用最简单的形式,删除多余的斜杠、参数和前缀
我正在使用来自 snook.ca (http://snook.ca/archives/javascript/simplest-jquery-slideshow) 的“最简单的 jQuery 幻灯片”,
我是 angularJS 的新手,我试图让简单的东西起作用,但我失败了。 HTML:
目前我有通常的 Controller / Action 结构: 博客 Controller : /blog/list /blog/create /blog/detail/my-blog-hash
我正在使用 Meteor 的帐户-ui。有没有办法在不编写自定义帮助程序代码的情况下检查用户是否已登录模板? 伪代码: {{#if userIsLoggedIn }} You're logge
使用 C++、OS=Windows 对文件夹(及其子文件夹)的所有 .mp3 文件进行循环的最短解决方案是什么?如果可能,我想避免使用第 3 方的东西,例如 boost,但如果不可能,我会使用这些第
我有一个非常简单的 vue 项目: Text Breakdown Breakd
我见过的最小的幻灯片。 $(function(){ $('.fadein img:gt(0)').hide(); setInterval(function(){ $('.f
我正在尝试使用 Rythm template engine在 Google App Engine/Java 开发服务器 (GAE/J) 上。这是一个简单的安装,除了 Rythm 之外什么都没有添加到基
我想定义一个函数template T constCast(const ScriptVar_t& s); .取决于T ,我想有不同的定义。 (ScriptVar_t 是一个类,但细节在这里并不重要。)
在我意识到导航按钮是必需的之前,我有一个相当大的应用程序,其中所有 View Controller 都通过 Storyboard连接连接。我现在无法再删除所有场景并重新开始,也无法扩展 segue 方
我在使用 nodeclipse 时遇到问题:我什至无法运行最简单的演示应用程序(简单需要 http)。当我尝试将“app.js”作为 Node 应用程序运行时,我得到: Node.js Process
问题: 使用 Core Text 获取给定文本行边界的最简单准确方法是什么? 问题: 我尝试了多种技术,但得到的结果不一致。 上下文: 我一直在努力弄清楚如何找到目前单行文本的实际范围。 Core T
我有一个使用 valueObject 的模板,它可能是两种风格之一,具体取决于它在我们的应用程序中的使用位置。所以我将它作为一个导入它: valueObject: Either[ ObjectA, O
在 PhoneGap 中将简单字符串备份(和检索)到云的最佳、最简单和最快的方法是什么?我已成功将整个 localStorage 对象导出为字符串。现在我只想在用户打开应用程序时将此字符串备份到云端,
我是一名优秀的程序员,十分优秀!