Android套接字连接拒绝错误

时间:2014-03-18 08:57:51

标签: android sockets

我想实现2个欺骗之间的套接字连接,客户端继续向服务器发送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权限。

4 个答案:

答案 0 :(得分:3)

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

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

您应确保以某种方式打开该服务,这将有助于您调试罪魁祸首的位置。如果你已经这样做了,我建议使用一些调试工具来跟踪TCP数据包(我不知道你在目标机器上使用什么样的操作系统;如果它'一些Linux发行版,tcpdump可能会有所帮助,在Win环境中WireShark效果很好。

答案 1 :(得分:2)

这不是数据传输错误'。这是一个被拒绝的连接'错误。这意味着您想要在您指定的IP:端口上运行数据的服务器不会运行。

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

我有同样的错误。我只是使用ServerSocket而且运行良好。

ServerSocket socket = new ServerSocket(8888);