【问题标题】:Equivalent Java functions to C functions in network programming网络编程中与 C 函数等效的 Java 函数
【发布时间】:2018-11-05 20:04:20
【问题描述】:

我正在对网络编程中使用的一些 C 函数和它们的 Java 对应函数进行比较。其中大部分我可以在有关Socket、ServerSocket、InetAddress 类的文档中找到。

但是我似乎在 Java 中找不到 listen()、recv()、send() 和 getaddrinfo()。就我而言,我发现大多数 Java 客户端-服务器程序不需要它们,因为您可以使用 flush() 或 PrintWriter() 直接写入字节/消息并将它们刷新到另一端。

我理解的对吗,是否有与这三个等效的功能?

【问题讨论】:

  • 你可以仔细阅读Java API看到(例如)积压控制可以做成一个ServerSocket构造......通过accept()返回的服务套接字可以观察到读写。请先阅读文档做出一些努力。

标签: java c sockets network-programming serversocket


【解决方案1】:

当您创建ServerSocket 时,底层的listen 函数会在您绑定到端口时被调用,无论是通过构造函数还是通过bind 方法。

recv 和 send 函数分别通过读取和写入 InputStream 和 OutputStream 来调用,它们附加到 Socket 实例并由 getInputStream 和 getOutputStream 方法返回。

【讨论】:

    【解决方案2】:

    监听和接收可以通过多种不同的方式实现。 Java 是面向对象的,因此逻辑通常由特定的对象类型表示。

    查看Reading from and Writing to a Socket 教程,其中提供了一些使用套接字的示例,例如使用InputStream和OutputStream与Socket进行交互:

    try (
      Socket echoSocket = new Socket(hostName, portNumber);
      PrintWriter out =
          new PrintWriter(echoSocket.getOutputStream(), true);
      BufferedReader in =
          new BufferedReader(
              new InputStreamReader(echoSocket.getInputStream()));
      BufferedReader stdIn =
          new BufferedReader(
              new InputStreamReader(System.in))
    )
    

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2016-06-28
      相关资源
      最近更新 更多