我无法将套接字客户端连接到不同WiFi网络上的套接字服务器

时间:2016-08-31 10:20:03

标签: java android sockets websocket serversocket

我正在学习使用Android进行套接字编程。我有两个移动设备。两者都连接到不同的WiFi网络。我的服务器应用程序在一台设备上运行,客户端应用程序在另一台设备上运行我无法将客户端连接到具有不同WiFi网络的服务器。为什么呢?
请帮助我,抱歉我沟通不畅。

客户代码:

class ClientSideThread extends Thread {

    String response;

    @Override
    public void run() {

        try {
            socket = new Socket("192.168.1.111",8085);

            OutputStream outToServer = socket.getOutputStream();
            DataOutputStream out = new DataOutputStream(outToServer);
            out.writeUTF("hi");
            InputStream inFromServer = socket.getInputStream();

            DataInputStream in = new DataInputStream(inFromServer);

            response = in.readUTF();

            out.close();
            in.close();
            socket.close();                

        } catch (UnknownHostException e) {
            e.printStackTrace();
            response = "UnknownHostException: " + e.toString();
        } catch (IOException e) {
            e.printStackTrace();
            response = "IOException: " + e.toString();
        }
    }
}

服务器代码:

private class SocketServerThread extends Thread {
    @Override
    public void run() {
        try {
            serverSocket = new ServerSocket(socketServerPORT);

            while (true) {
                Socket socket = serverSocket.accept();
                sIpAddress = socket.getInetAddress();
                sPort = socket.getPort();
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line;
                StringBuilder sb = new StringBuilder();
                if ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                message = sb.toString();
                printWriter = new PrintWriter(socket.getOutputStream());
                printWriter.println(message);
                printWriter.flush();

                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        String sDisplayMsg = "Replay:" + message;
                        TextView rowTextView = new TextView(MainActivity.this);
                        rowTextView.setText(sDisplayMsg);
                        linearLayout.addView(rowTextView);
                    }
                });
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你提到他们在两个不同的WiFi网络上。我怀疑是两个网络没有连接。

即使在尝试使用Andriod之前,请检查是否可以从客户端网络访问服务器设备IP地址。您可以将笔记本电脑或桌面连接到客户端网络,并发出ping命令ping 192.168.1.111以查看目标IP是否可访问。如果可以访问,请执行telnet 192.168.1.111 8085。如果telnet没有连接并且ping是可以访问的,那么它可以使服务器套接字没有绑定到端口8085.如果ping本身不可访问,那么2个路由器可能没有相互链接。有可能在服务器设备上禁用ping。您可以发出tracert 192.168.1.111以查看网络数据包的走分程度。查找目标服务器的网关IP。如果找不到,则2个路由器可能没有链接,您需要链接它们。