【发布时间】:2011-10-19 08:03:08
【问题描述】:
我刚接到一个任务。它是设计一个接受传入客户端连接的 java 套接字服务器。服务器的工作是接受它并跟踪所有连接的客户端,它必须将连接的客户端列表通告给所有连接的客户端。我是 Java 的新手。我只知道这项任务必须在线程的帮助下完成。我对 Java I/O、网络和线程有一些了解。但我无法协作所有这些概念在一个单独的应用程序中。如果有人提供一个模型程序,或者如何进行,那将会很有帮助。
谢谢, 马杜
【问题讨论】:
我刚接到一个任务。它是设计一个接受传入客户端连接的 java 套接字服务器。服务器的工作是接受它并跟踪所有连接的客户端,它必须将连接的客户端列表通告给所有连接的客户端。我是 Java 的新手。我只知道这项任务必须在线程的帮助下完成。我对 Java I/O、网络和线程有一些了解。但我无法协作所有这些概念在一个单独的应用程序中。如果有人提供一个模型程序,或者如何进行,那将会很有帮助。
谢谢, 马杜
【问题讨论】:
如果您想使用普通套接字:
在这里您可以找到有关 java 套接字的信息(以及在多线程环境中管理它的原则) http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html
在这里您可以找到有关 Java 中的多线程的信息 http://download.oracle.com/javase/tutorial/essential/concurrency/procthread.html
这是可能的解决方案之一,您可以通过多种方式设计您的解决方案: 每个线程管理一个与客户端的连接。 您有一个主类,它接受连接并保留活动连接列表 在每个新连接处,您都会派生一个管理它的线程。 您定义一个管理线程并公开同步方法以通知新客户端的类。 主类每次获得新连接时,都会通过上一步定义的方法通知对方。
注意:当您调用一个代表线程的类的方法时(因此,它是从与您调用该方法的线程不同的线程访问的)您必须小心不要招致并发问题(您可以在我发送的第二个链接中看到一些示例)。
【讨论】:
使用Apache Mina,它会让你从底层实现和管理线程和套接字中解放出来,让你专注于你想做的事情。
可能需要一天的时间来学习,但它确实有回报。 Mina 也提供了出色的性能。
Apache MINA 是一个网络应用程序框架,帮助用户轻松开发高性能和高扩展性的网络应用程序。它通过Java NIO在TCP/IP和UDP/IP等各种传输上提供了一个抽象的·事件驱动·异步API。
Apache MINA 通常被称为:
NIO 框架·库, 客户端·服务器框架·库,或 一个网络·套接字库。 然而,它远不止于此。请查看支持快速网络应用程序开发的功能列表,以及人们对 MINA 的评价。请自行下载,尝试我们的快速入门指南,浏览我们的常见问题解答或开始加入我们的社区
【讨论】: