Android套接字连接拒绝错误

eqqqjvef  于 2023-09-29  发布在  Android
关注(0)|答案(4)|浏览(145)

我想实现2个骗子之间的套接字连接,客户端不断发送GPS数据到服务器,我需要它都在新的线程运行,客户端发送第一个数据,然后保持显示错误像这样
03-18 16:35:11.805:E/客户端运行:(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权限。

dgtucam1

dgtucam11#

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

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

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

mcvgt66p

mcvgt66p2#

这不是“数据传输错误”。这是一个“连接拒绝”错误。这意味着您要传输数据的服务器没有在您指定的IP:端口上运行。
您的基本问题是每次在循环中都要创建一个新的ServerSocket,而不是在应用程序的生命周期中使用同一个ServerSocket

lc8prwob

lc8prwob3#

尝试在开始连接之前关闭adb服务。我有一个类似的问题,并杀死亚行服务之前,连接解决了这个问题。

rhfm7lfc

rhfm7lfc4#

我也犯了同样的错误。我只是使用了ServerSocket,它工作得很好。
ServerSocket socket = new ServerSocket(8888);

相关问题