我需要在笔记本电脑上创建一个Java程序来接收/发送CANopen消息.
选择RJ45作为网络的物理介质.我是CANopen和Java通信编程的新手.
请原谅我,如果我似乎不知情.事实是,我已经阅读了很多,但我仍然不知道如何开始.
首先,有点背景.分布式版本控制系统(DVCS)有许多不同的比较,它们比较存储库的大小或基准操作速度.我没有找到任何可以对各种DVCS的网络性能进行基准测试,以及所使用的各种协议......除了测量涉及网络的操作(命令)的速度,如'clone','pull'/'fetch'或'push'.
我想知道你怎么做这样的比较; 如何衡量应用程序的网络性能,或如何测试网络协议.我在这里设想还测量性能对网络带宽和网络延迟(ping时间)的依赖性; 一些协议以更多往返交换(协商)的形式牺牲等待时间以发送最小所需的最终"包".
如果可能的话,我宁愿只涉及一台计算机的解决方案.我想看看开源解决方案,在Linux上工作.但我也欢迎更通用的答案.
首选操作系统: Linux
首选语言: C,Perl,shell脚本
可能的测量:
如何进行此类测量(此类基准测试)?
添加02-06-2009:
最简单的基准测试(测量)将是time命令的网络版本,即运行的命令将给出我传输的字节数,以及执行给定命令期间的往返/网络连接数.
添加09-06-2009:上面提到的网络版命令解决方案的虚构输出
示例time如下所示:
$ ntime git clone -q git://git.example.com/repo.git
...
bytes sent: nnn (nn kiB), bytes received: nnn (nn kiB), avg: nn.nn KB/s
nn reads, nn writes
Run Code Online (Sandbox Code Playgroud)
请注意,它只是一个示例输出,详细说明了可能想要获得的信息类型.
添加09-06-2009:
看起来我想要的一些东西可以使用dummynet,工具(最初)来测试网络协议......
benchmarking networking profiling network-programming network-protocols
使用我的google-fu我只能找到几个节点:
router.bitcomet.com,router.utorrent.com,router.bittorrent.com
是否存在我不知道的所有bootstap节点的列表?torrent客户端开发人员在哪里获取引导节点的地址?(我看过洪流源代码,看到上面硬编码的模式.)
networking p2p bittorrent network-programming network-protocols
我的书中有一个关于计算利用率的问题,但是我无法找到关于这个主题的任何实质性信息来解决它.
无论如何,这是问题:
从地球到遥远行星的距离约为9×10 ^ 10米.如果在64 Mbps点对点链路上使用停止等待协议进行帧传输,那么信道利用率是多少?假设帧大小为32KB,光速为3×10 ^ 8m/s.
假设使用滑动窗口协议.对于什么发送窗口大小,链接利用率是100%?您可以忽略发送方和接收方的协议处理时间.
transmission network-protocols utilization network-utilization
从内核3.14开始,我看到有另一个名为tcp_autocorking的TCP优化.
tcp_cork和tcp_autocorking之间的实际区别是什么?
它只是tcp_cork的自动化版本吗?除了这个链接,我找不到任何有价值的信息:
我可以看到,有状态协议可以减少像曲奇一样的"模拟状态".
但是测试变得更加困难,以确保您的实现是正确的并重新连接,并且会话延续可能非常难以处理.
总是使用无状态协议被认为是更好的做法,还是它真的是特定于域的?
我认为在处理有状态协议时身份验证变得更容易,但是还有其他原因你应该使用有状态协议吗?
我一直在寻找一个好的通用二进制网络协议定义框架,以提供一种以多种语言编写实时游戏服务器和客户端(想想魔兽世界或Quake III)的方法(例如Java后端服务器和iPhone前端用Objective-C和Cocoa编写的客户端).
我想支持Windows上的Java Flash客户端,iPhone客户端和C#客户端(以及XBOX上的XNA客户端).
我正在寻找一种通过TCP/IP或UDP套接字流连接有效发送/接收消息的方法.我不是在寻找可以通过HTTP Web服务发送的东西,比如JSON或XML编组的对象.虽然Hessian的二进制Web服务协议是一个非常有趣的解决方案
我想要一种网络协议格式和客户端/服务器基本实现,它允许客户端连接到服务器并以定义的协议发送任何消息,并接收协议中的任何消息,而不必绑定到某种RPC端点.我希望我的协议传入和传出的任何消息的通用流.这样我就可以支持诸如服务器每隔100毫秒向所有客户端发送游戏中各种实体的位置.
客户端首先关闭套接字,当服务器没有太多数据时,tcp连接关闭就好了:
FIN -->
<-- ACK
<-- FIN, ACK
ACK -->
Run Code Online (Sandbox Code Playgroud)
当服务器忙于发送数据时:
FIN -->
<-- ACK,PSH
RST -->
Run Code Online (Sandbox Code Playgroud)
并且服务器连接进入CLOSE_WAIT状态并在那里挂了很长时间.
这有什么问题?客户相关或服务器相关?这种情况发生在Redhat5上,用于本地套接字.
此文章说说为什么"RST"是送的,但我不知道为什么停留在CLOSE_WAIT服务器的连接,不发送一个FIN出来.
[编辑]我忽略了最重要的信息,这发生在qemu的slirp网络仿真上.这似乎是处理密切连接的slirp bug的问题.
最近,在阅读Socket Programming HOWTO时,以下部分跳了出来:
但是,如果您计划重新使用套接字进行进一步传输,则需要意识到套接字上没有"EOT"(传输结束).我再说一遍:如果在处理0字节后套接字send或recv返回,则连接已断开.如果连接没有被破坏,你可以永远等待一个recv,因为套接字不会告诉你没有什么可读的(现在).现在,如果你仔细考虑一下,你就会发现套接字的一个基本事实:消息必须是固定长度(yuck),或者是分隔(耸肩),或者指示它们有多长(更好),或者通过关闭连接来结束.选择完全属于你,(但有些方式比其他方式更严格).
本节重点介绍了如何编写套接字"协议"以传递消息的4种可能性.我的问题是,用于实际应用的首选方法是什么?
通常最好在每条消息中包含消息大小(可能在标题中),因为文章或多或少断言?有没有其他方法更可取的情况?
我想知道是否可以通过telnet(或其他程序)建立与LDAP服务器的连接,并开始发出请求和接收响应,就像我通常使用HTTP一样.事实上,这个问题更通用,与我对网络连接和通信协议的误解有关.让我告诉你我对这个话题的看法:
所有应用程序协议都定义了通信协议(即服务器将理解并根据其传递进行操作的消息).如果我知道应用程序协议是如何工作的,我可以建立与服务器的连接(控制该协议服务器端的守护进程)并开始与服务器通信.例如,使用HTTP,我可以通过telnet建立与HTTP SERVER的连接,并开始与他通过此请求进行交谈,例如:
GET /users/pepito HTTP/1.1
Host: stackoverflow
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
我希望这个程序能够在任何应用程序协议中发生.这个概念对吗?
我已经瞥见了LDAP协议规范RFC,但我不明白这些消息的格式.我的意思是,我期待阅读类似HTTP协议规范的内容; 但它太普通了.你能举个例子说明如何进行LDAP搜索吗?
networking ×3
linux ×2
tcp ×2
automation ×1
benchmarking ×1
bittorrent ×1
c ×1
can-bus ×1
canopen ×1
java ×1
ldap ×1
p2p ×1
profiling ×1
protocols ×1
qemu ×1
real-time ×1
sockets ×1
telnet ×1
transmission ×1
utilization ×1
xna ×1