首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有从输入流读取RUDP数据包。

没有从输入流读取RUDP数据包。
EN

Stack Overflow用户
提问于 2021-03-30 03:03:21
回答 1查看 150关注 0票数 0

我使用RUDP协议使用发送和接收数据包,非常有用的java库在java中实现了RUDP协议。该库的设计非常类似于TCP。它使用ReliableServerSocket作为ServerSocket,使用ReliableSocket作为套接字。

但是,我在创建到服务器的客户端连接时遇到了错误。成功地创建了服务器和客户端之间的连接,因为执行了所有过去的accept()方法。但是,当试图从输入流读取时,它不包含任何字节。

客户端:

代码语言:javascript
复制
public class Client {

ReliableSocket rs;

public Client() throws IOException {
    rs = new ReliableSocket();
    rs.connect(new InetSocketAddress("127.0.0.1", 3033));
    
    String message = "Hello";
    
    byte[] sendData = message.getBytes();

    OutputStream os = rs.getOutputStream();

    os.write(sendData, 0, sendData.length);
    
}

public static void main(String[] args) throws IOException {
    new Client();
}

}

服务器:

代码语言:javascript
复制
public class Server {

ReliableServerSocket rss;
ReliableSocket rs;

public Server() throws Exception {
    rss = new ReliableServerSocket(3033);
    
    while (true) {
        rs = (ReliableSocket) rss.accept();
        
        System.out.println("Client connected");

        byte[] buffer = new byte[100];
        
        InputStream in = rs.getInputStream();
        
        in.read(buffer);
        
        //here the value doesn't return from the inputstream
        System.out.println("message from client: " + new String(buffer).trim());

    }
}

public static void main(String[] args) throws Exception {
    new Server();
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-30 03:53:22

代码不工作,因为它假设写已经发送了字节,但是根据用于OutputStream的Javadoc

刷新此输出流,并强制写入任何缓冲的输出字节。刷新的一般约定是,调用它是一种指示,如果以前写入的任何字节被输出流的实现所缓冲,这些字节应该立即被写入它们的预期目的地。

因此,将此添加到客户端将确保某些内容被发送。

代码语言:javascript
复制
  os.flush();

事实证明,RUDP库就是这样的--假设这是第109行中的ReliableSocketOutputStream的实际源代码,那么在这个类中,底层套接字实际上是写在flush()中的唯一位置。

在服务器端,它应该处于循环状态,直到连接关闭。请参阅用于InputStream的Javadoc

从输入流中读取一定数量的字节并将其存储到缓冲区数组b中。实际读取的字节数作为整数返回。此方法将阻塞,直到输入数据可用、检测到文件结束或抛出异常为止。

因此,如果它正在返回,并且没有任何数据,这是因为其他原因(文件末尾是封闭流/套接字的同义词)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66864241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档