java - 从套接字读取字节

标签 java sockets

我想读取服务器写入套接字的确切字节数(确切长度)。例如,如果服务器写入“Hello”,下次服务器写入(“world”)。因此,我需要将这两次写入捕获为来自客户端套接字的两次读取。我已经实现了服务器和客户端,如下所示来演示我的问题。在该示例中,输出类似于以下内容

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);
            }

有人可以帮我做这件事吗..

最佳答案

你不能直接使用 TCP。 TCP 是一种流协议(protocol),它没有消息。

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

在客户端,您首先读取消息大小,然后读取整个消息。

关于java - 从套接字读取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544085/

相关文章:

java - 在 Linux OpenSuse cron 上,脚本运行,但只生成空日志

java - 如何在OnCreate中自动打开网络?

c# - 我正在为一个网站制作 JavaScript 扩展。我想改用 Java 或 C#。是否可以?

c - 将数据写入以 2 帧发送的套接字

sockets - VMWare/Cygwin/Sockets环境中的Netcat异常

c++ - send() 函数返回所需的更多字节 C++

java - 使用套接字发送请求行+文件 - java

java - 谷歌应用引擎数据库

java - 无法将 (int, double) 对添加到 HashMap<Integer, Double>

java - Android ksoap2 Session cookies 管理