【问题标题】:How can I send and receive data concurrently in socket programming in java using multithread? [closed]java - 如何使用多线程在java中的套接字编程中同时发送和接收数据? [关闭]
【发布时间】:2012-11-12 18:37:50
【问题描述】:

我是 Java 新手,正在尝试使用 Datagram 套接字编写程序来在客户端和服务器之间发送和接收数据包。问题是当光标到达receive() 行时,它会卡在那里直到数据包到达。在这段时间里,我怎样才能向对方发送数据?换句话说,如何让它使用数据报套接字同时发送和接收?

【问题讨论】:

  • 当你想并发独立地做一些事情时,你需要使用多个线程。
  • 如果你能分享一些有用的代码。

标签: java sockets concurrency datagram


【解决方案1】:

您需要线程(或 NIO/netty,但要高级得多)。

如果不能一次处理,基本上阻塞 IO(顾名思义)会在每个读/写操作上阻塞当前线程。因此,您需要第二个线程来处理写入。每个好的 Java 套接字教程都会包含一个多线程服务器的示例。

【讨论】:

    【解决方案2】:

    您似乎指的是异步 I/O,虽然这确实是通过使用线程和套接字来实现的(如前所述),但最好使用 NIO:http://en.wikipedia.org/wiki/New_I/O

    它的扩展性要好得多,并且是基于事件的,这比多线程概念更容易掌握,前提是您对 IO 和网络没有太多经验。你可以通过使用 Apache MINA 来避免它的一些复杂性:http://mina.apache.org/

    【讨论】:

    • 你在这里混淆了三个不同的东西。并发 I/O 在阻塞模式下使用多个线程,并由 java.net 包支持。 NIO 和 Netty 支持非阻塞 I/O。异步 I/O 使用完成回调,而不是线程,并在 JDK 1.7 中作为 NIO2 引入。
    • 感谢您的澄清!
    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多