执行Socket(主机名,端口)导致android崩溃

时间:2017-07-26 19:02:22

标签: java android sockets

帮助!我正试图在Android Studio中做一些简单的Java套接字网络,我甚至无法进入。服务器程序似乎工作正常,但Android应用程序客户端崩溃时出现错误“不幸的是InTouch已停止”执行该行:

sock = new Socket("Mark2015jun08", 4415);

我输入的主机名是C:> hostname命令报告的内容,Windows网络控制面板,当我登录路由器时,它显示在DHCP表中。当我输入“”作为文件说应该打开环回的主机名时,它甚至会崩溃。我已经尝试过调用Socket()十几种不同的方法,如下面的代码所示。我当然可以使用一些帮助。 谢谢,-Mark

在android客户端程序中,我在onResume()方法中添加了以下try语句:

try {
    //sock = new Socket("Mark2015jun08", 4415);
    byte[] ip = {(byte)192, (byte)168, (byte)1, (byte)124};
    //sock = new Socket(InetAddress.getByAddress(ip), 4415);
    //sock = new Socket(InetAddress.getByName("192.168.1.124"), 4415);
    //sock = new Socket("LOCALHOST", 4415);
    sock = new Socket("", 4415);
    // ommitted logic to set socket timeout and
    // open object streams based on sock
} catch (IOException e){
    sock = null;
    log(e.toString());
}

Windows ipconfig和路由器DHCP表都确认我的IP地址,但我仍然得到相同的错误。三个不同的来源都同意我的主机名,但无论我输入什么字符串的主机名,甚至“”,它都不起作用。我究竟做错了什么?

我在Manifest.xml文件中使用以下权限:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

这是我在Netbeans中创建的服务器程序,我使用命令C:&gt; cmd.exe从Windows java -jar intouchserver.jar窗口运行它。这将在笔记本电脑上运行服务器程序并进入行

sock = serversock.accept();

并完全按照accept()的文档解释。据我所知,它正在侦听端口4415.(注意:我在此语句之前检查了serversock:它是非空的。)

package intouchserver;

import ...

public class InTouchServer {
    private static ServerSocket serversock;
    private static Socket sock;

    public static void main(String[] args) {
        try {
            serversock = new ServerSocket(4415);
            sock = serversock.accept();
        } catch (IOException e){
            System.out.println("Can't establish socket");
            System.out.println(e);
            System.exit(1);
        }
        // ommitted logic to open object streams based on sock
        // and read and write to them        
    }
}

1 个答案:

答案 0 :(得分:0)

我解决了自己的问题。事实证明,如果Socket()调用在我放置的onResume()函数中,那么您会得到一个相当无用的错误消息,但是如果您将Socket()命令放在onCreate()中功能你得到一个更丰富的信息:即“主线上的网络”。所以然后将Socket()调用放入一个线程解决了问题,然后我离开了。非常感谢James K Polk关于logcat的提示。我一直在努力解决那些“应用已经停止”的消息。