Tag: networking

JSSE包创建两个需要两次unwraps的tls包。 为什么?

我正在使用连接的openssl客户端检查jsse tls加密和解密的java应用程序的行为。 首先,我观察到当我为客户端数据调用unwrap时,它总是解包消耗37个字节并产生0.下一个unwrap消耗一些字节并产生一些。 起初我以为客户端会首先包装一个空数组。 但后来我发现jsse代码做的相同,只不过它产生1个字节而不是0。 因此,对wrap每次调用都会消耗X个字节并产生Y个字节,但需要两个unwrap而第一个消耗37个字节并产生1个字节,第二个消耗Y-37字节并产生X-1个字节。 虽然openssl和jsse几乎一样,但我希望这是正确的。 但是我想知道,为什么会这样。 我没有看到这个原因,需要额外的资源……?

进行涉及Java的RAW套接字编程的最佳方法

我有一些现有的C代码使用ICMP原始套接字来执行Ping,我需要在Java中使用此代码,因为Java不支持ICMP包。 当我在JNI中包装代码并调用它时,C代码在执行以下操作时无法获取套接字: socket(AF_INET,SOCK_RAW,1); 我想Java已经放弃了一些禁用Java进程中使用原始套接字的权限。 我必须找到解决方案。 我观察到以下情况: 如果我编写一个C程序并使用Runtime从Java调用它,分叉代码可能会打开套接字。 如果我从Eclipse运行这个本机代码,它也运行良好。 我想这是因为Eclipse已经从eclipse.exe启动,而不是从java.exe启动。 这意味着我可以通过选择这两种策略中的一种来解决我的问题,但我也不喜欢。 有没有其他方法可以让Java接受JNI代码打开这个套接字? 编辑:我越是关注这个问题,我认为它必须与Windows 7的启动方式有关。 看起来如果你让Windows运行起来,或者你在Windows以外的其他平台上,也可以使用InetAddress.isReachable()方法。

是否可以指定要使用的JVM(或IDE)的网络接口

情况就是这样,我的macbook pro中有两个网络接口。 一个是静态定义的以太网接口,另一个是DHCP配置的无线接口。 我试图弄清楚如何配置一个特定的java项目只使用我的静态有线接口,而不是简单地通过JVM或我的IDEA(IntelliJ 8)选择列表中的第一个 我已经设法通过vmware实例实现了这个目标,我的虚拟环境仅仅依赖于我的有线接口,但是这个广告性能问题以及在windows / osx之间翻转的一般麻烦。 到目前为止,我一直无法找到一个jvm属性,让我指定使用哪个nic,也没有看到IntelliJ定义的文档。 如果有人对如何尽可能无痛地解决这个问题有任何想法,我将不胜感激。

java.net与java.nio

在什么时候从java.net切换到java.nio更好? .net(不是Microsoft实体)更容易理解和更熟悉,而nio是可扩展的,并带有一些额外的漂亮function。 具体来说,我需要为这种情况做出选择:我们有一个控制中心在几个远程站点管理硬件(每个站点有一台计算机管理多个硬件单元(收发器,TNC和旋转器))。 我的想法是在每台机器上编写一个服务器应用程序,作为从控制中心到无线电硬件的网关,每个单元有一个插槽。 根据我的理解,NIO适用于一个服务器,许多客户端,但我想的是一个客户端,许多服务器。 我想第三种选择是使用MINA,但我不确定这是否会对一个简单的问题投入太多。 每个远程服务器最多有8个连接,全部来自同一个客户端(用于控制所有硬件和单独的TX / RX套接字)。 但是,单个客户端将希望同时连接到多个服务器。 不是将每个服务器放在不同的端口上,而是可以在客户端使用通道选择器,还是更好地在客户端进行multithreadingio并以不同方式配置服务器? 实际上,由于远程机器仅用于与其他硬件交互,RMI或IDL / CORBA是否是更好的解决方案? 实际上,我只是希望能够从硬件发送命令并接收遥测,而不必编写一些应用程序层协议来执行此操作。

将网站内容读入字符串

目前我正在开发一个可用于读取url指定的网站内容的类。 我刚刚开始使用java.io和java.net冒险,所以我需要咨询我的设计。 用法: TextURL url = new TextURL(urlString); String contents = url.read(); 我的代码: package pl.maciejziarko.util; import java.io.*; import java.net.*; public final class TextURL { private static final int BUFFER_SIZE = 1024 * 10; private static final int ZERO = 0; private final byte[] dataBuffer = new byte[BUFFER_SIZE]; private final URL urlObject; public TextURL(String urlString) throws […]

Java TCP套接字:数据传输速度很慢

我设置了一个带有ServerSocket的服务器,用客户机连接到它。 它们通过交换机直接联网,ping时间<1ms。 现在,我尝试通过套接字的输出流将“大量”数据从客户端推送到服务器。 转移0.6Gb需要23分钟。 我可以通过scp在几秒钟内推送一个更大的文件。 知道我可能做错了什么吗? 我基本上只是循环并在套接字上调用writeInt。 速度问题与数据的来源无关,即使我只是发送一个恒定的整数而不是从磁盘读取。 我尝试将两侧的发送和接收缓冲区设置为4Mb,没有骰子。 我为读写器使用缓冲流,没有骰子。 我错过了什么吗? 编辑:代码 这是我制作套接字的地方 System.out.println(“Connecting to ” + hostname); serverAddr = InetAddress.getByName(hostname); // connect and wait for port assignment Socket initialSock = new Socket(); initialSock.connect(new InetSocketAddress(serverAddr, LDAMaster.LDA_MASTER_PORT)); int newPort = LDAHelper.readConnectionForwardPacket(new DataInputStream(initialSock.getInputStream())); initialSock.close(); initialSock = null; System.out.println(“Forwarded to ” + newPort); // got my new port, […]

Java:没有安全管理器:RMI类加载器被禁用

嗨我有RMI应用程序,现在我尝试从我的客户端调用服务器上的一些方法。 我有以下代码: public static void main(final String[] args) { try { //Setting the security manager System.setSecurityManager(new RMISecurityManager()); IndicatorsService server = (IndicatorsService) Naming .lookup(“rmi://localhost/” + IndicatorsService.SERVICE_NAME); DataProvider provider = new OHLCProvider(server); server.registerOHLCProvider(provider); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (NotBoundException e) { e.printStackTrace(); } } server是否正确加载,但是当我尝试调用server.registerOHLCProvider(provider); 我收到这些错误: java.rmi.ServerException: RemoteException […]