我正在编写一个简短的测试应用程序来练习连接到服务器。该应用程序所做的就是从 editText 框中获取 IP,然后连接到服务器。看起来我可以连接到服务器,因为我能够将数据发送到服务器并让服务器打印它。
我想添加一些错误检查,以在尝试向服务器发送任何内容之前确认我已连接。然而,问题是,每当我使用 Socket.isConnected() 或 isBound() 方法时,我的应用程序就会崩溃。
那么,如果这些方法似乎不起作用,我该如何检查我是否已连接。正如我所说,我知道我已连接,因为我可以向服务器发送内容。
下面是代码,我按一下按钮即可连接。我想要做的是确认我已连接,然后启动一个线程,该线程将在后台从服务器发送和接收数据。在 s.isBound() 部分中,程序崩溃了。我什至可以放入 s.isConnected() 它也会崩溃。
最后,isBound 和 isConnected 有什么区别?
private OnClickListener connectListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (!connected) {
serverIpAddress = serverIp.getText().toString();
if (!serverIpAddress.equals("")) {
try{
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "Trying to Connect");
s = new Socket(serverAddr, SERVERPORT);
Log.d("ClientActivity", "Connected");
output = s.getOutputStream();
input = s.getInputStream();
}
catch (UnknownHostException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
if(s.isBound()){
connected = true;
cThread = new Thread(new ClientThread());
cThread.setName("Client Connection Thread");
cThread.start();
}
}
}
}
};
这就是日志输出的内容。
11-13 17:03:56.718: D/ClientActivity(2039): Trying to Connect
11-13 17:03:56.757: W/System.err(2039): java.net.ConnectException: /192.168.16.1:6340 - Connection refused
11-13 17:03:56.757: W/System.err(2039): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)
11-13 17:03:56.757: W/System.err(2039): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
11-13 17:03:56.757: W/System.err(2039): at java.net.Socket.startupSocket(Socket.java:705)
11-13 17:03:56.757: W/System.err(2039): at java.net.Socket.<init>(Socket.java:263)
11-13 17:03:56.757: W/System.err(2039): at com.AUIEE.client_test.Client_TestActivity$1.onClick(Client_TestActivity.java:88)
11-13 17:03:56.757: W/System.err(2039): at android.view.View.performClick(View.java:2485)
11-13 17:03:56.765: W/System.err(2039): at android.view.View$PerformClick.run(View.java:9089)
11-13 17:03:56.765: W/System.err(2039): at android.os.Handler.handleCallback(Handler.java:587)
11-13 17:03:56.765: W/System.err(2039): at android.os.Handler.dispatchMessage(Handler.java:92)
11-13 17:03:56.773: W/System.err(2039): at android.os.Looper.loop(Looper.java:130)
11-13 17:03:56.773: W/System.err(2039): at android.app.ActivityThread.main(ActivityThread.java:3859)
11-13 17:03:56.773: W/System.err(2039): at java.lang.reflect.Method.invokeNative(Native Method)
11-13 17:03:56.773: W/System.err(2039): at java.lang.reflect.Method.invoke(Method.java:507)
11-13 17:03:56.773: W/System.err(2039): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840)
11-13 17:03:56.773: W/System.err(2039): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598)
11-13 17:03:56.773: W/System.err(2039): at dalvik.system.NativeStart.main(Native Method)
11-13 17:03:56.781: D/AndroidRuntime(2039): Shutting down VM
11-13 17:03:56.781: W/dalvikvm(2039): threadid=1: thread exiting with uncaught exception (group=0x4001e560)
11-13 17:03:56.789: E/AndroidRuntime(2039): FATAL EXCEPTION: main
11-13 17:03:56.789: E/AndroidRuntime(2039): java.lang.NullPointerException
11-13 17:03:56.789: E/AndroidRuntime(2039): at com.AUIEE.client_test.Client_TestActivity$1.onClick(Client_TestActivity.java:103)
11-13 17:03:56.789: E/AndroidRuntime(2039): at android.view.View.performClick(View.java:2485)
11-13 17:03:56.789: E/AndroidRuntime(2039): at android.view.View$PerformClick.run(View.java:9089)
11-13 17:03:56.789: E/AndroidRuntime(2039): at android.os.Handler.handleCallback(Handler.java:587)
11-13 17:03:56.789: E/AndroidRuntime(2039): at android.os.Handler.dispatchMessage(Handler.java:92)
11-13 17:03:56.789: E/AndroidRuntime(2039): at android.os.Looper.loop(Looper.java:130)
11-13 17:03:56.789: E/AndroidRuntime(2039): at android.app.ActivityThread.main(ActivityThread.java:3859)
11-13 17:03:56.789: E/AndroidRuntime(2039): at java.lang.reflect.Method.invokeNative(Native Method)
11-13 17:03:56.789: E/AndroidRuntime(2039): at java.lang.reflect.Method.invoke(Method.java:507)
11-13 17:03:56.789: E/AndroidRuntime(2039): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840)
11-13 17:03:56.789: E/AndroidRuntime(2039): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598)
11-13 17:03:56.789: E/AndroidRuntime(2039): at dalvik.system.NativeStart.main(Native Method)
我同意你的代码错位在TRY/CATCH
循环可能是您问题的根源。
回答你的问题isBound
and isConnected
,这是它们的定义。
public boolean isBound ()
返回此套接字是否绑定到本地地址和端口。
如果套接字绑定到本地地址,则返回 true,否则返回 false。
public boolean isConnected ()
返回此套接字是否连接到远程主机。
如果套接字已连接,则返回 true,否则返回 false。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)