Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的回调和自定义套接字客户端_Android_Sockets - Fatal编程技术网

Android中的回调和自定义套接字客户端

Android中的回调和自定义套接字客户端,android,sockets,Android,Sockets,我使用了本教程中的代码,但出现了以下错误: 无法解析方法“send(java.lang.String)” 无法解析方法“disconnect()” Client.java类中的问题,我根据教程(上面的链接)创建了这个类,但我无法解决这个问题 MainActivity.java Client.java }这是因为您在套接字(来自回调)上调用这些方法,而不是在客户端(位于另一个作用域)上调用这些方法,因为它们具有相同的名称,java将使用最小的变量作用域 更改回调变量的名称或客户端变量的名称,在使用

我使用了本教程中的代码,但出现了以下错误:

无法解析方法“send(java.lang.String)”

无法解析方法“disconnect()”

Client.java类中的问题,我根据教程(上面的链接)创建了这个类,但我无法解决这个问题

MainActivity.java

Client.java


}

这是因为您在
套接字(来自回调)上调用这些方法,而不是在
客户端(位于另一个作用域)上调用这些方法,因为它们具有相同的名称,java将使用最小的变量作用域

更改回调变量的名称或客户端变量的名称,在使用正确的回调变量时,它应该会起作用:)

例:

void doIt() {
    Client socket = new Client("192.168.0.8", 1234);
    socket.setClientCallback(new Client.ClientCallback () {
        @Override
        public void onMessage(String message) {
        }

        @Override
        public void onConnect(Socket socket) {
            socket.send("Hello World!\n");
            socket.disconnect();
        }

        @Override
        public void onDisconnect(Socket socket, String message) {
        }

        @Override
        public void onConnectError(Socket socket, String message) {
        }
    });

    socket.connect();
}
public class Client {
private Socket socket;
private OutputStream socketOutput;
private BufferedReader socketInput;

private String ip;
private int port;
private ClientCallback listener=null;

public Client(String ip, int port){
    this.ip=ip;
    this.port=port;
}

public void connect(){
    new Thread(new Runnable() {
        @Override
        public void run() {
            socket = new Socket();
            InetSocketAddress socketAddress = new InetSocketAddress(ip, port);
            try {
                socket.connect(socketAddress);
                socketOutput = socket.getOutputStream();
                socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                new ReceiveThread().start();

                if(listener!=null)
                    listener.onConnect(socket);
            } catch (IOException e) {
                if(listener!=null)
                    listener.onConnectError(socket, e.getMessage());
            }
        }
    }).start();
}

public void disconnect(){
    try {
        socket.close();
    } catch (IOException e) {
        if(listener!=null)
            listener.onDisconnect(socket, e.getMessage());
    }
}

public void send(String message){
    try {
        socketOutput.write(message.getBytes());
    } catch (IOException e) {
        if(listener!=null)
            listener.onDisconnect(socket, e.getMessage());
    }
}

private class ReceiveThread extends Thread implements Runnable{
    public void run(){
        String message;
        try {
            while((message = socketInput.readLine()) != null) {   // each line must end with a \n to be received
                if(listener!=null)
                    listener.onMessage(message);
            }
        } catch (IOException e) {
            if(listener!=null)
                listener.onDisconnect(socket, e.getMessage());
        }
    }
}

public void setClientCallback(ClientCallback listener){
    this.listener=listener;
}

public void removeClientCallback(){
    this.listener=null;
}

public interface ClientCallback {
    void onMessage(String message);
    void onConnect(Socket socket);
    void onDisconnect(Socket socket, String message);
    void onConnectError(Socket socket, String message);
}
void doIt() {
    final Client myClient = new Client("192.168.0.8", 1234);
    myClient.setClientCallback(new Client.ClientCallback () {
        @Override
        public void onMessage(String message) {
        }

        @Override
        public void onConnect(Socket socket) {
            myClient.send("Hello World!\n");
            myClient.disconnect();
        }

        @Override
        public void onDisconnect(Socket socket, String message) {
        }

        @Override
        public void onConnectError(Socket socket, String message) {
        }
    });

    myClient.connect();
}