我想读取服务器写入套接字的确切字节数(确切长度)。例如,如果服务器写入“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/