Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查android应用程序中是否连接了TCP套接字_Android_Sockets_Tcp_Client Server - Fatal编程技术网

如何检查android应用程序中是否连接了TCP套接字

如何检查android应用程序中是否连接了TCP套接字,android,sockets,tcp,client-server,Android,Sockets,Tcp,Client Server,我正在编写一个简短的测试应用程序来练习连接到服务器。应用程序所做的只是从编辑文本框中获取IP,然后连接到服务器。看起来我可以连接到服务器,因为我可以向服务器发送数据并让服务器打印数据 在尝试向服务器发送任何内容之前,我想添加一些错误检查以确认我已连接。然而,问题是,每当我使用Socket.isConnected()或isBound()方法时,我的应用程序就会崩溃 那么,如果这些方法似乎不起作用,我如何检查我是否连接。正如我所说,我知道我已连接,因为我可以将内容发送到服务器 下面是代码,我按一个按

我正在编写一个简短的测试应用程序来练习连接到服务器。应用程序所做的只是从编辑文本框中获取IP,然后连接到服务器。看起来我可以连接到服务器,因为我可以向服务器发送数据并让服务器打印数据

在尝试向服务器发送任何内容之前,我想添加一些错误检查以确认我已连接。然而,问题是,每当我使用Socket.isConnected()或isBound()方法时,我的应用程序就会崩溃

那么,如果这些方法似乎不起作用,我如何检查我是否连接。正如我所说,我知道我已连接,因为我可以将内容发送到服务器

下面是代码,我按一个按钮连接。我要做的是确认我已连接,然后启动一个线程,该线程将在后台从服务器发送和接收数据。在say的部分中,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)
11-13 17:03:56.718:D/ClientActivity(2039):尝试连接
11-13 17:03:56.757:W/System.err(2039):java.net.ConnectException:/192.168.16.1:6340-连接被拒绝
11-13 17:03:56.757:W/System.err(2039):位于org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)
11-13 17:03:56.757:W/System.err(2039):位于org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
11-13 17:03:56.757:W/System.err(2039):位于java.net.Socket.startupSocket(Socket.java:705)
11-13 17:03:56.757:W/System.err(2039):位于java.net.Socket(Socket.java:263)
11-13 17:03:56.757:W/System.err(2039):在com.AUIEE.client\u test.client\u TestActivity$1.onClick(client\u TestActivity.java:88)
11-13 17:03:56.757:W/System.err(2039):在android.view.view.performClick(view.java:2485)上
11-13 17:03:56.765:W/System.err(2039):在android.view.view$PerformClick.run(view.java:9089)
11-13 17:03:56.765:W/System.err(2039):位于android.os.Handler.handleCallback(Handler.java:587)
11-13 17:03:56.765:W/System.err(2039):位于android.os.Handler.dispatchMessage(Handler.java:92)
11-13 17:03:56.773:W/System.err(2039):位于android.os.Looper.loop(Looper.java:130)
11-13 17:03:56.773:W/System.err(2039):位于android.app.ActivityThread.main(ActivityThread.java:3859)
11-13 17:03:56.773:W/System.err(2039):位于java.lang.reflect.Method.invokenactive(本机方法)
11-13 17:03:56.773:W/System.err(2039):位于java.lang.reflect.Method.invoke(Method.java:507)
11-13 17:03:56.773:W/System.err(2039):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840)
11-13 17:03:56.773:W/System.err(2039):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598)
11-13 17:03:56.773:W/System.err(2039):在dalvik.System.NativeStart.main(本机方法)
11-13 17:03:56.781:D/AndroidRuntime(2039):关闭虚拟机
11-13 17:03:56.781:W/dalvikvm(2039):threadid=1:线程以未捕获异常退出(组=0x4001e560)
11-13 17:03:56.789:E/AndroidRuntime(2039):致命异常:main
11-13 17:03:56.789:E/AndroidRuntime(2039):java.lang.NullPointerException
11-13 17:03:56.789:E/AndroidRuntime(2039):在com.AUIEE.client\u test.client\u TestActivity$1.onClick(client\u TestActivity.java:103)
11-13 17:03:56.789:E/AndroidRuntime(2039):在android.view.view.performClick(view.java:2485)
11-13 17:03:56.789:E/AndroidRuntime(2039):在android.view.view$PerformClick.run(view.java:9089)
11-13 17:03:56.789:E/AndroidRuntime(2039):在android.os.Handler.handleCallback(Handler.java:587)
11-13 17:03:56.789:E/AndroidRuntime(2039):在android.os.Handler.dispatchMessage(Handler.java:92)上
11-13 17:03:56.789:E/AndroidRuntime(2039):在android.os.Looper.loop(Looper.java:130)
11-13 17:03:56.789:E/AndroidRuntime(2039):位于android.app.ActivityThread.main(ActivityThread.java:3859)
11-13 17:03:56.789:E/AndroidRuntime(2039):位于java.lang.reflect.Method.Invokenactive(本机方法)
11-13 17:03:56.789:E/AndroidRuntime(2039):位于java.lang.reflect.Method.invoke(Method.java:507)
11-13 17:03:56.789:E/AndroidRuntime(2039):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:840)
11-13 17:03:56.789:E/AndroidRuntime(2039):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:598)
11-13 17:03:56.789:E/AndroidRuntime(2039):在dalvik.system.NativeStart.main(本机方法)
首先,您的

if(s.isBound()){
    connected = true;
    cThread = new Thread(new ClientThread());
    cThread.setName("Client Connection Thread");
    cThread.start();
}
布洛克走错地方了。如果触发了任何catch块,则它将执行上述块。但如果引发异常,则意味着
s
可能为null,因此您有一个特定的NullPointerException。(应用程序崩溃)适当的位置在
try
块内

其次,从logcat日志中可以看到,您试图建立的连接被拒绝。也许ip/端口或防火墙有问题

此外,logcat还通知您可能存在未捕获的异常

1-13 17:03:56.781: W/dalvikvm(2039): threadid=1: thread exiting with uncaught exception (group=0x4001e560)

修复这些问题,如果问题仍然存在,请再次讨论。

我同意您的代码在
TRY/CATCH
循环中放错了位置可能是问题的根源

关于
isBound
isConnected
的问题,以下是它们的定义

public boolean isBound()

返回此套接字是否绑定到本地地址和端口。
如果套接字绑定到本地地址,则返回true,否则返回false


public boolean已连接()

返回此套接字是否连接到远程主机。
如果套接字已连接,则返回true,否则返回false


添加注销输出,当您使用isBound()或isConnected()时,您的程序会崩溃。好的,我想我已经解决了。Th