【问题标题】:Android socket connection refused errorAndroid套接字连接被拒绝错误
【发布时间】:2014-04-23 20:16:24
【问题描述】:

我想实现两个欺骗之间的套接字连接,客户端不断向服务器发送 GPS 数据,我需要它们都在新线程中运行,客户端发送第一个数据然后继续显示这样的错误

03-18 16:35:11.805:E/Client 运行:(8163):java.net.ConnectException:无法连接到 /192.168.2.103(端口 5678):连接失败:ECONNREFUSED(连接被拒绝)

这是客户端代码

    public class Send implements Runnable{

    private boolean Connect = true;

    public void Connect(){
        Connect = true;
    }
    public void Disconnect(){
        Connect = false;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(Connect){
            try {
                SocketClient = new Socket("192.168.2.103", 5678);
                ObjectOutputStream oos = new ObjectOutputStream(SocketClient.getOutputStream());
                oos.writeDouble(GPSinfo[2]);
                //ObjectInputStream ois = new ObjectInputStream(SocketClient.getInputStream());
                //ois.readInt();
                oos.close();
                //ois.close();
            } catch (Exception e) {
                Log.e("Client run: ", e.toString());
            }
        }

    }

}

这是服务器代码

    public class Receive implements Runnable{
    private boolean CanReceive = true;
    private double Data;

    public void Connect(){
        CanReceive = true;
    }
    public void Disconnect(){
        CanReceive = false;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

        while(CanReceive){
            try {
                SocketServer = new ServerSocket(5678);
                Socket connectedSocket = SocketServer.accept();
                ObjectInputStream ois = new ObjectInputStream(connectedSocket.getInputStream());
                Data = ois.readDouble();
                DataText.setText("" + Data);
                //ObjectOutputStream oos = new ObjectOutputStream(connectedSocket.getOutputStream());
                //oos.writeInt(1);
                //ois.close();
                //oos.close();
            } catch (Exception e) {
                Log.e("Server run: ", e.toString());
            }

        }
    }

}

顺便说一句,这两个代码都是内部类,并添加了INTERNET权限。

【问题讨论】:

    标签: android sockets


    【解决方案1】:

    很明显这不是路由器防火墙相关的问题,因为您在同一个网络下,所以只有几种可能性:

    • 在服务器端的那个 IP 上的那个端口上没有任何东西在监听
    • 服务器端的本地防火墙阻止了该连接尝试
    • 您没有使用WIFI,所以您不在同一个网络下。

    您应该确保您可以通过其他方式打开该服务,这将有助于您调试罪魁祸首。如果您已经这样做了,我建议您使用一些调试工具来跟踪 TCP 数据包(我也不知道您在目标机器上使用哪种操作系统;如果是一些 linux 发行版,tcpdump 可能会有所帮助,在 Win 环境中 WireShark 工作得很好)。

    【讨论】:

    • 我确定在 AndroidManifest.xml 中添加了 INTERNET 权限,并且我的服务器可以接收第一个数据。
    • 然后验证其余可能的问题,一定是其中之一
    • 我尝试像你提到的那样使用 WireShark 捕获,是的,客户端可以继续向我发送数据,意味着连接正常吗?
    • 这意味着从您的客户端发送的数据(至少)到达您的服务器端(假设您在服务器端使用wireshark)。也就是说,服务器端一定有问题,可能是该端口上没有任何东西在监听,也可能是本地防火墙阻止了连接。
    • @Tony 要么连接被拒绝数据可以到达对等方。你不能同时拥有它。
    【解决方案2】:

    这不是“数据传输错误”。这是一个“连接被拒绝”错误。这意味着您要向或从中传输数据的服务器未在您指定的 IP:port 上运行。

    【讨论】:

      【解决方案3】:

      在开始连接之前尝试终止 adb 服务。在连接解决问题之前,我遇到了类似的问题并终止了 adb 服务。

      【讨论】:

      • 你能解释一下吗?我该怎么做
      【解决方案4】:

      我有同样的错误。我只是使用了 ServerSocket,它运行良好。

      ServerSocket socket = new ServerSocket(8888);

      【讨论】:

        猜你喜欢
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-31
        • 2015-08-26
        • 2013-12-19
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        相关资源
        最近更新 更多