Java中的套接字和进程
在Java中,最好的方法是打开一个持续侦听端口,并在收到数据包后仍然发送。目前,我对网络编程并不特别了解,因此我在网上找到的教程并不是特别有用。
将侦听套接字作为服务器套接字并在与我用来向服务器发送数据的套接字的单独线程中运行它是否有意义?
在一个松散相关的问题中。有谁知道如果只是为Java编程,然后在netbeans中将其导出以供在黑莓上使用(使用插件),套接字仍然可以工作?
解决方案
回答
如果我们负担得起线程处理,请尝试一下(请记住,我遗漏了一些细节,例如异常处理和与线程配合使用)。我们可能需要研究" SocketChannels"和/或者NIO异步套接字/选择器。这应该可以入门。
boolean finished = false; int port = 10000; ServerSocket server = new ServerSocket(port); while (!finished) { // This will block until a connection is made Socket s = server.accept(); // Spawn off some thread (or use a thread pool) to handle this socket // Server will continue to listen }
回答
我也需要回到这一基础。我会推荐O'Reilly出色的Java in Nutshell,其中包括针对这种情况的代码示例(也可以在线获得)。有关我们想尽早做出的决策的很好概述,请参见第7章。
回答
至于连接到Blackberry,这是有问题的,因为在大多数情况下,Blackberry没有公共IP地址,而是位于WAP网关或者无线提供商接入点服务器之后。 RIM提供了移动数据服务器(MDS)来解决此问题,并提供在Blackberry上使用ServerSocket语义的"推送"数据。 MDS可与Blackberry Enterprise Server(BES)和Unite Server一起使用。
一旦建立,就可以使用HTTP协议通过MDS将数据发送到特定单元。此处带有LAMP源代码,对Push协议有很好的描述。 pushout.pl中的参数PORT = 7874连接到Blackberry Browser Push服务器套接字。通过更改该参数,可以将有效负载发送到我们自己的ServerSocket接受连接的任意端口。
回答
如果套接字代码必须在BlackBerry上运行,则不能使用标准Java套接字。我们必须使用J2ME Connector.open API来创建两种类型的套接字(用于发起来自BlackBerry的连接的套接字以及用于侦听BlackBerry上的连接/推送的套接字)。看一下RIM JDE附带的示例。