如何通过同一个套接字发送不同类型的数据

时间:2016-05-19 12:59:41

标签: java sockets io

我想知道这是如何运作的: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。

  1. 在此处克隆所有文件:https://github.com/richardrl/downloader/tree/master/target/classes

  2. 进入" dummyserver"文件夹和终端类型:' java DLServer 1124'启动服务器。如您所见,请求的文件" dummy.txt"与此服务器位于同一文件夹中。

  3. 返回上一级并输入:' java DLServer 4444'。

  4. 现在输入' 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)

1 个答案:

答案 0 :(得分:0)

我对你的要求有点困惑,所以我只想回答标题中的问题。 在我使用java套接字的少量时间内,每当我发送数据时,我首先将数据转换为字节数组,然后在第一个索引中添加一个字节,以确定字节数组在接收时应解释为什么。点击此处了解如何操作 - http://stackoverflow.com/questions/18571223/how-to-convert-java-string-into-byte

我不确定这是否回答了你的问题,但也许这会有所帮助。