Tag: 协议

Java中的网络通信选项(客户端/服务器)

有一个RMI,我理解它是相对脆弱的,直接的Socket连接,这是相当低级别的,而字符串,虽然它一样坚实,但似乎是隐喻的PHP。 对于基于Internet的客户端/服务器通信,我有哪些基本选项? 有什么优点/缺点? 我应该考虑哪些问题? 第三方库建议很好,只要它们保持平台独立(即没有限制性的本机代码)。 寻找选项,而不是一个明确的答案,所以我将我自己的要求的细节留空。

网络协议的设计模式?

所以我正在构建一个相当简单的文件传输服务器/客户端,但很难找到一个好的设计来处理协议中的不同命令和状态。 假设您有3个不同的命令upload , remove , download ,您可以使用3个不同的if语句,并使用额外的if语句跟踪状态,但这不会扩展并且无法维护。 责任链设计模式可用于连续的东西,如加密和压缩,但它不会处理命令的逻辑。 我知道这是一个相当广泛的问题,但有人有任何建议吗?

如何在Java中阅读icy协议?

我想从流式冰冷协议中读取数据。问题是我尝试过的所有库(dsj,MP3SPI)都使用HttpUrlConnection来执行此操作。但是我已经在Windows 7上尝试了它并且我收到了“无效的http响应”这是正常原因“HTTP 200 OK”与“ICY 200 OK”不同。我知道这可以通过套接字实现,但我是初学者,所以如果任何可以提供几行o代码,所以我可以得到一个想法,我将不胜感激。如果你有一些解决方案,请分享他们。谢谢,祝你有愉快的一天! 这是我尝试过的代码: URLConnection connection = new URL(“89.47.247.59:8020”).openConnection(); InputStream in = connection.getInputStream(); System.out.println(“getting lots of bytes”); in.close(); 错误是: Exception in thread “main” java.io.IOException: Invalid Http response at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.jav‌​a:1328) at javaapplication1.JavaApplication1.main(JavaApplication1.java:46) Java Result: 1 抱歉无法弄清楚如何格式化代码或添加换行符。 编辑:我在下面的评论中包含了代码。

协议缓冲Java RPC堆栈

根据这个维基百科条目: “协议缓冲区与Facebook的Thrift协议非常相似,不同之处在于它不包含用于定义服务的具体RPC堆栈。由于协议缓冲区是开源的,因此出现了许多RPC堆栈以填补这一空白。” 但是,没有引用RPC堆栈的示例。 任何人都可以建议基于Java的RPC堆栈实现?

使用状态模式设计在Java中实现通信协议

如果在别处得到回答,请道歉; 找不到足够的信息来说服自己最好的方法来做到这一点。 我也意识到这是一个冗长的解释,没有代码,但请告诉我是否应该提供一些示例代码来帮助演示我正在做的事情。 基本上: 使用System.in/out在Java中实现通信协议 当前方法正在实现一种状态模式,其中Scanner在上下文类中的System.in上实例化 具体状态调用上下文方法从扫描程序读取,然后根据扫描程序返回的值适当地执行操作/转换状态 我最初使用状态模式的意图是在从System.in解析这样的序列时简化代码(不要问语法,这是我必须使用的东西): 命令名称= X. HEADER 标题信息行 内容 命令行内容 ENDCONTENTS ENDCOMMAND 我通常为我期望接收的每种命令定义一个具体的状态。 以上面的序列为例,我的状态集看起来像{WAITING_FOR_COMMAND,COM​​MAND_RECEIVED,PARSING_HEADER,PARSING_CONTENTS,PARSING_DONE,COMMAND_PROCESSED}。 我最初在WAITING_FOR_COMMAND,然后当收到“COMMAND NAME = X”时我转换到COMMAND_RECEIVED,然后当“HEADER”进入时我会转换到PARSING_HEADER等等。这个设计使遍历所有边缘情况协议变得更容易,并且在协议被调整时也使代码易于更新/维护。 显然比大规模切换语句和重复边界检查要好得多。 我遇到的问题是,我发现自己在上下文类中声明了越来越多的状态变量,因为我充实了我的具体状态行为,并且知道这可能很糟糕,因为我正在创建非常暴露的接口和非常高的联系上下文和具体的状态类。 该协议中的命令序列可以任意长,并且我需要保存命令序列中每个项所赋予的信息,直到命令序列完成。 以上面的命令序列为例,在“COMMAND ID = X”之后,我希望在收到“ENDCOMMAND”后保存值X以备将来使用并完全处理命令。 在“HEADER”之后,我希望保存标题信息,以便在我实际处理命令时收到“ENDCOMMAND”后将来使用。 等等等等。 简单地将commandId和头状态变量添加到上下文类现在可以工作,但看起来并不干净或完全封装在我身上。 有没有人对他们如何解决这个问题有任何高层建议? 为此更好地使用状态设计模式吗? 只是要注意我一直在玩的一些想法: 为每种类型的命令序列定义状态上下文,并在从System.in接收相关命令时调用适当的上下文; 这看起来几乎像拥有巨大的开关块一样凌乱,似乎过度curl了设计 设计一个支持复合FSM的全面FSM架构,其中每个命令序列在一个总体FSM中占用自己的FSM; 这对我来说似乎有些过分 为每个命令序列类型创建一个具有各种子类的ProtocolCommand对象; 我可以在转换时将它们传递到每个状态,然后逐渐构建它们……但是这会使状态界面变得混乱并强制所有状态摄取它们不一定会使用的参数 非常感谢! 对不起,这太冗长了,如果我能说清楚的话,请告诉我。

投票给出给定方案的最佳协议

我有一个设计决定。 我需要你的建议。 要求: 服务器和客户端。 客户端通常是手机。 通过互联网连接。 服务器和客户端希望相互通信。 在客户端和服务器之间交换文本,多媒体。 文本将是一些标准格式。 这是预先确定的。 实时要求 会话通常会持续5-15分钟。 在某些情况下,不到一分钟。 假设会话持续时间为5分钟。 该协议应遵守标准。 它必须是有效的。 选项1我为我的应用程序设计的二进制协议。 选项2将我的服务器实现为HTTPServlet。 客户端发送post请求,post消息中的查询和servlet在消息中发送响应。 但是,我认为对于实时交互,这不是一个好的选择,因为即使对于相同的客户端和会话,也会为每个post请求创建新线程。 请评论一下这个效率。 选项3使用普通的servlet。 将面临与上述相同的问题。 选项4使用SOAP 选项5使用REST 选项6使用Google Wave (我尚未阅读规范) 选项7建议其他一些协议 现在,我没有Web服务的经验,但如果它是选项,那么我不介意在其中投入时间。 基本上,我希望选项1的速度和效率采用标准的处理方式。 谢谢

Java相当于Cocoa委托/ Objective-C非正式协议?

什么是Java代替Cocoa代理? (我知道我可以将一个接口传递给一个类,并让该类调用适当的方法,但我想知道是否还有其他方法可以实现更接近Cocoa / Objective-C的非正式协议)

H.323,如何在没有媒体的情况下制作简单的铃声。 此脚本遵循Q.931设置但仍无效

有人可以帮我解决这个问题吗? 当我发送此请求时,我已经在wireshark中看到数据包将在1720 tcp端口发送到SJPhone。 但是SJPhone仍然不响。 我想让它响起(无论是媒体)。 我非常感谢你的支持。 我必须缺少消息协议细节来实现这一点。 请给我一些积极的指示。 仅供参考:我使用过此跟踪: http : //www.vconsole.com/usermanuals/sample_isdn_trace.pdf import java.io.*; import java.net.*; public class test { public static void main(String[] args) throws UnknownHostException, IOException { /* Step 1: simulate the Q.931 packets exchange */ byte st[]=new byte[256]; st[0]=0x08; // protocol discriminator st[1]=0x02; // length (bytes) of call reference st[2]=0x02; // call […]

Java中的Unsigned Int

我正在尝试实现现有的网络协议,该协议大量使用Java不支持的无符号数据类型。 我目前所做的是针对每种数据类型,选择下一个更大的数据类型,以便无符号数可以适合正区域,然后使用字节移位来获得所需的效果。 由于这非常容易出错,而且对于无符号长时间使用,我必须使用比扩展类型重得多的BigInteger,我想知道是否有更好的方法来实现这一点?

在Java中实现X-modem协议

我想从串口接收文件,我必须使用X-modem协议设计用于通过Java中的串行端口接收文件。 所以,如果有人能够了解那么请帮助我。 我很麻烦.plz