我想知道这是如何运作的:https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html#readUTF()
如果我们使用DataOutputStream到int length = getChildCount("bookstore", 0, "Book");
和writeUTF("dog")
,writeUTF("cat")
调用一次就会得到“狗”#39}然后叫第二次得到猫#39;
此外,实现此目的的最佳方法是什么(来自此代码:https://github.com/richardrl/downloader/tree/master/src/main/java): 我在N台服务器中有1个文件。我有客户端查询其中一个服务器。如果它不在服务器上,我希望客户端在最多2个请求中从正确的服务器下载文件。
我现在的计划是拥有一个散列图(所有服务器中的所有文件),它将每个文件映射到它所在服务器的端口号和域名(找到服务器套接字的两个属性) 。当客户端从任何服务器请求时,请求的服务器将在hashmap中搜索该文件。如果在当前服务器上找不到,则当前服务器将发送错误(当前由readUTF()
完成),然后发送包含该文件的正确服务器的端口号和域名。
我目前的问题是我通过以下过程获得NoRouteToHostException。
在此处克隆所有文件:https://github.com/richardrl/downloader/tree/master/target/classes
进入" dummyserver"文件夹和终端类型:' java DLServer 1124'启动服务器。如您所见,请求的文件" dummy.txt"与此服务器位于同一文件夹中。
返回上一级并输入:' java DLServer 4444'。
现在输入' java DownloaderClient localhost 4444'开始客户。输入" dummy.txt"请求" dummy.txt"。我没有正确连接到虚拟服务器,而是收到此错误:
java DownloaderClient localhost 4444 在while循环中 dummy.txt 客户端:dummy.txt 线程" main"中的例外情况java.net.NoRouteToHostException:无法分配请求的地址 at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在java.net.Socket.connect(Socket.java:579) 在java.net.Socket.connect(Socket.java:528) 在java.net.Socket。(Socket.java:425) 在java.net.Socket。(Socket.java:208) 在DownloaderClient.main(DownloaderClient.java:21)
答案 0 :(得分:0)
我对你的要求有点困惑,所以我只想回答标题中的问题。 在我使用java套接字的少量时间内,每当我发送数据时,我首先将数据转换为字节数组,然后在第一个索引中添加一个字节,以确定字节数组在接收时应解释为什么。点击此处了解如何操作 - http://stackoverflow.com/questions/18571223/how-to-convert-java-string-into-byte
我不确定这是否回答了你的问题,但也许这会有所帮助。