在Java中,最好的方法是打开一个持续监听的端口,并在收到数据包后仍然发送。我目前对网络编程并不是特别精通,所以我在网上找到的教程并不是特别有帮助。
将侦听套接字作为serversocket并将其运行到我用来向服务器发送数据的套接字的单独线程中是否有意义?
一个松散相关的问题。有没有人知道如果只是为java编程,在netbeans然后导出它用于黑莓(使用插件)套接字仍然可以工作?
答案 0 :(得分:12)
如果你能负担得起线程,试试这个(请记住,我遗漏了一些细节,比如异常处理和线程玩得很好)。您可能希望查看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
}
答案 1 :(得分:2)
至于连接到Blackberry,这是有问题的,因为在大多数情况下,Blackberry将没有公共IP地址,而是将在WAP网关或无线提供商接入点服务器之后。 RIM提供移动数据服务器(MDS)来解决这个问题,并提供在黑莓上使用ServerSocket语义的“推送”数据。 MDS可与Blackberry Enterprise Server(BES)和Unite Server一起使用。
设置完成后,可以使用HTTP协议通过MDS将数据发送到特定单元。有LAMP源代码的Push协议here有很好的描述。 pushout.pl中的参数PORT = 7874连接到Blackberry Browser Push服务器套接字。通过更改该参数,可以将有效负载发送到您自己的ServerSocket接受连接的任意端口。
答案 2 :(得分:2)
如果您的套接字代码必须在BlackBerry上运行,则无法使用标准Java套接字。您必须使用J2ME Connector.open API来创建两种类型的套接字(从BlackBerry启动连接,以及在BlackBerry上侦听连接/推送的套接字)。看看RIM的JDE附带的例子。
答案 3 :(得分:1)
我也需要回到这个基础知识。我推荐O'Reilly出色的 Java in a Nutshell ,其中包含了这种情况的代码示例(同样可用online)。有关您希望尽早做出的决定的详细概述,请参阅第7章。