从套接字读取字节

时间:2011-12-17 10:24:27

标签: java sockets

我想读取服务器写入套接字的确切字节数(确切长度)。例如,如果服务器写"你好"并且下次服务器写(" world")。所以我需要将这两个写入捕获为来自客户端套接字的两次读取。我已经实现了如下服务器和客户端来演示我的问题。在该示例中,out put类似于以下

... 1234 89 90 ........ 1034 1035 ...... 2004

我的期望是什么 1

2

3

2004

我怎样才能做到这一点。

//server
 ServerSocket server = new ServerSocket(9999);
        Socket s =server.accept();
        InputStream stream = s.getInputStream();
        byte[] by = new byte[1024];

        while(true){
            stream.read(by);
            String received = new String(by, 0, by.length, "ISO8859_1");
            System.out.println(received);
        }


//client
            Socket s = new Socket("localhost", 9999);
            OutputStream out =s.getOutputStream();
            int i =0;
            while(true){
                i++;
                byte[] msg=Integer.toString(i).getBytes();
                out.write(msg);
            }

有人可以帮我这样做..

1 个答案:

答案 0 :(得分:3)

您无法直接使用TCP。 TCP是一种流媒体协议,它没有消息。

你需要在上面构建自己的“协议”。最简单的方法是首先写下一条消息将包含的字节数,然后是消息。

在客户端,您首先阅读邮件大小,然后阅读整个邮件。