2012-03-28 78 views
1

有代码,通过我的黑莓不写:黑莓套接字连接 - 应用程序挂起上acceptAndOpen()

public class ServerThread extends Thread { 
    ... 
     String url = "socket://:12345;deviceside=true;interface=wifi"; 
     ServerSocketConnection connect = (ServerSocketConnection) Connector.open(url); 

     SocketConnection sc = (SocketConnection) connect.acceptAndOpen(); 
     InputStream input = sc.openInputStream(); 
    ... 

我开始BlackBerry模拟器和调试的代码,发现的,其connect变量是OK,但aplication 挂电话电话connect.acceptAndOpen()

我在黑莓和插座是新。 正如我所假设的那样,该模拟器需要localhost的一些输入,但不明白。

如果是,我怎么能提供这样的投入?
我是否应该在localhost上另外开始一些流程?

编辑:

public class MyApp extends UiApplication 
{ 
... 
    public MyApp() 
    {   
     new ServerThread().start();   
     // Push a screen onto the UI stack for rendering. 
     pushScreen(new MyScreen());   
    } 
... 
+1

本地主机是设备,你需要输入一个有效的IP地址。您还需要在另一个线程中使用此代码。 – 2012-03-28 22:41:11

+0

这个'最后弦乐将localAddress = connect.getLocalAddress();'让我在我的电脑,在模拟器ran.I检查它已经是我的真实合法的IP。 – sergionni 2012-03-28 23:31:14

+0

迈克尔,对不起,我不太不情愿。你的意思是说,我应该隐式地指定IP吗?谢谢 – sergionni 2012-03-28 23:34:09

回答

1

你试图打开通过Wi-Fi上的模拟器直接TCP连接。

您无法连接从模拟器到本地主机,因为它采用了MDS模拟器作为代理为每个连接,进而阻止你访问本地主机。 (我假设为“本地主机”,你的意思是在你的开发工作站上运行的服务器套接字)

所以我建议你在模拟器上测试时删除来自URL的wi-fi后缀,并连接到你的工作站服务器使用工作站LAN上的真实IP地址。您只能在模拟器中配置WLAN后才能在模拟器中使用“; interface = wifi”后缀,但由于您无法放置任何真实设备,因此此模拟网络非常无用。

+0

它与'wifi'或'edge'参数确定。我已经检查了。问题是other.I已经发现了。由于对socket的错误理解,我犯了虚假错误,什么时候没有初始化客户端。对于我的情况,它可能简单地从浏览器URL调用'localhost:12345'然后acceptAndOpen()工作正常。 – sergionni 2012-03-30 14:18:34