1

我正在尝试用 Java 创建一个客户端-服务器应用程序。此应用程序将图像从客户端传输到服务器。要求是应用程序需要按网络字节顺序排列。(下图)

这将帮助我学习如何在未来部署其他协议,因此寻找一些如何实现这一点的技巧。目前我的服务器-客户端正在工作和传输图像,但不确定如何实现该协议。

谢谢

这是我当前的服务器/客户端代码:

公共类网络服务器 {

public static void main(String[] args) { NetworkServer servidor = new NetworkServer(); System.out.println("Server started()"); BufferedInputStream bis; BufferedOutputStream bos; int num; File file = new File("/images"); if (!(file.exists())){ file.mkdir(); } try { ServerSocket socket = new ServerSocket(15000); Socket incoming = socket.accept(); try { try{ if (!(file.exists())){ file.mkdir(); } InputStream inStream = incoming.getInputStream(); OutputStream outStream = incoming.getOutputStream(); BufferedReader inm = new BufferedReader(new InputStreamReader(inStream)); PrintWriter out = new PrintWriter(outStream, true /* autoFlush */); String filelength = inm.readLine(); String filename = inm.readLine(); System.out.println("Server() Filename = " + filename); System.out.println("Server() File lenght: " + filelength + " bytes"); System.out.println("Server() ACK: Filename received = " + filename); //RECIEVE and WRITE FILE byte[] receivedData = new byte[1000000]; bis = new BufferedInputStream (incoming.getInputStream()); bos = new BufferedOutputStream (new FileOutputStream("/images" + "/" + "image.jpg")); while ( (num = bis.read(receivedData)) > 0){ bos.write(receivedData,0,num); } bos.close(); bis.close(); File receivedFile = new File(filename); long receivedLen = receivedFile.length(); System.out.println("Server() ACK: Length of received file = " + receivedLen); } finally { incoming.close(); } } catch (IOException e){ e.printStackTrace(); } } catch (IOException e1){ e1.printStackTrace(); } } }

协议

4

1 回答 1

3

“网络字节顺序”的另一个名称是“大端”(参见Wikipedia)。

现在您需要在 Java 中找到一个支持整数大端编码的类。这并不像应有的那么简单,因为文档避免了诸如“网络字节顺序”或“大端”之类的标准术语。您的经验教训:当您可以通过使用标准搜索词找到所需内容时,文档会更加有用。

也就是说,您要查找的类是DataInputStream

读取四个输入字节并返回一个 int 值。让 ad 成为读取的第一个到第四个字节。返回的值为:

    (((a & 0xff) << 24) | ((b & 0xff) << 16) |
     ((c & 0xff) << 8) | (d & 0xff))

readInt()的文档)。

于 2012-08-29T08:23:11.257 回答