如何在Java中构造线程化TCP客户端

如何在Java中构造线程化TCP客户端,java,tcpclient,Java,Tcpclient,我需要用Java编写一个线程化TCP客户端,但不确定如何最好地构造它。我希望客户端在另一个线程上运行,这样就不会阻塞主线程 理想情况下,我会在主线程上创建客户机,然后指示客户机连接到服务器。可能需要一些时间的连接将发生在另一个线程上。一旦客户端连接,它将通知主线程并开始侦听来自服务器的传入消息。接收到消息时会通知主线程 目前,我的计划是让TCP客户机类实现Runnable,并在run方法中执行连接和接收 如果您有任何关于如何构造tcp客户端的想法,我将不胜感激 > P> >在应用程序结构时应考虑

我需要用Java编写一个线程化TCP客户端,但不确定如何最好地构造它。我希望客户端在另一个线程上运行,这样就不会阻塞主线程

理想情况下,我会在主线程上创建客户机,然后指示客户机连接到服务器。可能需要一些时间的连接将发生在另一个线程上。一旦客户端连接,它将通知主线程并开始侦听来自服务器的传入消息。接收到消息时会通知主线程

目前,我的计划是让TCP客户机类实现Runnable,并在run方法中执行连接和接收


如果您有任何关于如何构造tcp客户端的想法,我将不胜感激

> P> >在应用程序结构时应考虑的一些事项:
1.理想情况下,应该有单独的线程来读取和写入网络流。否则可能会有问题
2.如果你想“通知”其他线程的某个事物或传递某些东西,考虑java“条件”习惯用法/对象和/或阻塞队列/DEGE.< /P> < P>查看和处理线程之间的通信,并实现符合您需要的实现。
Netty有一条引导学习曲线,但它有一个易于维护的设计,只要你不需要UDP传输(然后我会看一看),它就足够了。此外,您不需要使用Netty实现状态机。

问题1。它是GUI应用程序还是命令行应用程序,或者是某个更大系统的非实用部分?问题2。“通知主线程”是什么意思?问题3。你能详细介绍一下这是一种什么样的协议吗;信息是如何来回传递的?问题4。它将有多复杂和健壮?也许这只是一种做简单的事情然后放弃的方式?什么样的信息?“主线程”在做什么?我使用java.util.concurrent.LinkedBlockingDeque对将通过网络发送的内容进行排队。这也可以帮助您:系统的“状态机”(类似于)草图。如果您觉得有帮助,请向上投票(向上箭头)。谢谢