套接字编程无法连接到服务器(主机无法访问)

时间:2013-09-03 04:30:45

标签: android sockets

我在4.3 JellyBean上运行的Google Nexus平板电脑上运行了一个应用,该平板电脑连接到server(IP 50.30.233.162)。该应用程序无法连接到服务器并将错误消息显示为“主机无法访问”。

我检查了 - >来自应用的InetAddress.getLocalHost().toString();,它会显示“localhost/127.0.0.1”但设备的实际IP为“50.20.32.225

我还给了权限

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

我真的被困住了,任何帮助都会很棒。

公共类MainActivity扩展了Activity {

Socket socket = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



        String serverAddress = "50.30.233.162";
        new Connecting().execute(serverAddress);
}


private class Connecting extends AsyncTask<String,Integer,String>{


    protected String doInBackground(String... serverAdd) {

        String serverAddress = serverAdd[0];

        try {

            EditText editText = (EditText) findViewById(R.id.edit_message);
            editText.setText(InetAddress.getLocalHost().toString());

            int serverPort = 5789;
            socket = new Socket(serverAddress, serverPort);
    } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
        }



        // TODO Auto-generated method stub
        return null;
    }

}

这是我的服务器代码

公共类服务器{

/**
 * @param args
 */
public static void main(String[] args) {
    try {
    //  TupleSpaceServer tupleServer = new TupleSpaceServer();

        ServerSocket server = null;
        Socket client = null;
        String serverIpAdd = null;

        int portAdd;
        serverIpAdd = InetAddress.getLocalHost().toString();
        String[] serverAdd = serverIpAdd.split("/");
        serverIpAdd = serverAdd[1];
        portAdd = 5789;
        System.out.println("Server is now online");
        System.out.println("Server IP Address: " + serverIpAdd);
        System.out.println("Port Address: " + portAdd);
        server = new ServerSocket(portAdd);

        while (true) {
            client = server.accept();
            System.out.println("Client Connected Address: "
                    + client.getInetAddress());
        //  new Thread(new SessionThread(client, tupleServer)).start();
            server.close();
        }
    } catch (IOException e) {
        System.err.println(e);
    }

}

}

服务器现已上线 服务器IP地址:50.30.233.162 港口地址:5789

2 个答案:

答案 0 :(得分:0)

这里没有什么明显错误,这可能是一个网络问题。

我首先在服务器端使用tcpdump或wireshark来查看连接是否确实存在。

答案 1 :(得分:0)

好吧,我想出了问题。这是路由器问题。我的路由器阻止了设备之间的通信。我无法弄清楚必须要做的路由器的变化,但我切换到另一台路由器,现在一切正常。

暂时我会坚持使用第二台路由器,而不是详细介绍旧的路由器。