Sockets Blackberry套接字连接-应用程序挂起在AcceptEndOpen()上
有一段代码不是我为黑莓写的:Sockets Blackberry套接字连接-应用程序挂起在AcceptEndOpen()上,sockets,blackberry,connection,inputstream,Sockets,Blackberry,Connection,Inputstream,有一段代码不是我为黑莓写的: public class ServerThread extends Thread { ... String url = "socket://:12345;deviceside=true;interface=wifi"; ServerSocketConnection connect = (ServerSocketConnection) Connector.open(url); SocketConnection
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
变量是可以的,但应用程序挂起connect.acceptAndOpen()
调用
我是黑莓和socket的新手。
正如我所假设的,模拟器期望从localhost
获得一些输入,但没有得到它
如果是,我如何提供这样的输入?我应该在
localhost
上额外启动一些进程吗
编辑:
public class MyApp extends UiApplication
{
...
public MyApp()
{
new ServerThread().start();
// Push a screen onto the UI stack for rendering.
pushScreen(new MyScreen());
}
...
您正试图在模拟器上通过Wi-Fi打开直接TCP连接 您无法从模拟器连接到localhost,因为它使用MDS模拟器作为每个连接的代理,从而阻止您访问localhost。(我假设“localhost”是指在开发工作站上运行的服务器套接字)
因此,我建议您在模拟器上测试时删除URL中的wi-fi后缀,并使用工作站LAN上的真实IP地址连接到工作站服务器。只有在模拟器中配置WLAN后,您才能在模拟器中使用“interface=wifi”后缀,但此模拟网络非常无用,因为您无法在其中放置任何真实设备。您正试图在模拟器上通过Wi-Fi打开直接TCP连接 您无法从模拟器连接到localhost,因为它使用MDS模拟器作为每个连接的代理,从而阻止您访问localhost。(我假设“localhost”是指在开发工作站上运行的服务器套接字)
因此,我建议您在模拟器上测试时删除URL中的wi-fi后缀,并使用工作站LAN上的真实IP地址连接到工作站服务器。只有在模拟器中配置WLAN后,您才能在模拟器中使用“interface=wifi”后缀,但此模拟网络非常无用,因为您无法在其中放置任何真实设备。Localhost是该设备,您需要输入有效的IP地址。您还需要在另一个线程中使用此代码为我提供了运行模拟器的PC的真实有效IP。我已经检查过了。Michael,对不起,我不太明白。你的意思是,我应该以某种方式隐式指定IP吗?thanksgetLocalAddress将提供设备的IP,你需要连接到的IP,服务器。线程将被锁定,它正在等待来自客户端的连接。Localhost是设备,您需要输入有效的IP地址。您还需要在另一个线程中使用此代码为我提供了运行模拟器的PC的真实有效IP。我已经检查过了。Michael,对不起,我不太明白。你的意思是,我应该以某种方式隐式指定IP吗?thanksgetLocalAddress将提供设备的IP,你需要连接到的IP,服务器。线程将被锁定,它正在等待客户端的连接。使用
wifi
或edge
参数可以。我已经检查过了。问题是其他的。我已经发现了。由于对套接字的理解不好,我犯了一个错误,当没有初始化客户端时。对于我的情况,可能只是从浏览器URL调用localhost:12345
。然后acceptAndOpen()工作正常。使用wifi
或edge
参数也可以。我已经检查过了。问题是其他的。我已经发现了。由于对套接字的理解不好,我犯了一个错误,当没有初始化客户端时。对于我的情况,它可能只是从浏览器URL调用localhost:12345
。然后acceptAndOpen()工作正常。