Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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
翻译行动<;字符串>;从c#到Java_Java_C#_Callback - Fatal编程技术网

翻译行动<;字符串>;从c#到Java

翻译行动<;字符串>;从c#到Java,java,c#,callback,Java,C#,Callback,我目前正在编写C#(主机)和Java(客户端)之间的一个非常简单的TCP连接 我正在努力用java接收消息,我发现了一个(在我看来)很好的c#解决方案。我将引用传递给构造函数中的方法,该方法将被保存,稍后如果收到消息,我可以从父类调用该方法 我想用java做同样的事情,但我不知道怎么做 最后,我想有一个易于使用的类,如何在java中调用 服务器代码(c#) 你可以用。将使用者实例传递给客户端构造函数,并在接收时调用使用者的accept方法: public class Client { p

我目前正在编写C#(主机)和Java(客户端)之间的一个非常简单的TCP连接

我正在努力用java接收消息,我发现了一个(在我看来)很好的c#解决方案。我将引用传递给构造函数中的方法,该方法将被保存,稍后如果收到消息,我可以从父类调用该方法

我想用java做同样的事情,但我不知道怎么做

最后,我想有一个易于使用的类,如何在java中调用

服务器代码(c#)

你可以用。将使用者实例传递给客户端构造函数,并在接收时调用使用者的
accept
方法:

public class Client {
    private final Consumer<String> messageConsumer;

    public Client( String ip, int port, Consumer<String>  messageConsumer) throws IOException {
        this.messageConsumer = messageConsumer;
        Thread recievingRoutineThread = new Thread( new Runnable() {
            @Override
            public void run() {
                while(true) {
                    String recievingString = null;
                    try{ recievingString = recieve();
                    }catch(Exception ex) {}
                    if(recievingString != null && recievingString != "")
                        sendRecievedMessageOutside(recievingString);
                }
            }
        } );
        recievingRoutineThread.start();
    }
    private void sendRecievedMessageOutside(String message){
        messageConsumer.accept( message );
    }
}
公共类客户端{
私人最终消费者;
公共客户端(字符串ip、int端口、消费者消息消费者)引发IOException{
this.messageConsumer=messageConsumer;
Thread ReceivingRoutineThread=新线程(new Runnable()){
@凌驾
公开募捐{
while(true){
String ReceivingString=null;
试试{receivingstring=receive();
}捕获(例外情况除外){}
if(receivingstring!=null&&receivingstring!=“”)
SendReceivedMessageOutside(接收字符串);
}
}
} );
receivingRoutineThread.start();
}
私有void sendReceivedMessageOutside(字符串消息){
messageConsumer.accept(message);
}
}

谢谢这正是我搜索的内容,最简单的回调:)
private final String host;
    private Socket clientSocket;
    private OutputStream socketOutStream;
    private OutputStreamWriter osr;
    private BufferedWriter bw;

    private InputStream socketinstr;
    private InputStreamReader isr;
    private BufferedReader br;

    public Client(String ip, int port) throws IOException {
        host = ip;
        clientSocket = new Socket(ip,port);

        //init output
        socketOutStream = clientSocket.getOutputStream();
        osr = new OutputStreamWriter(socketOutStream);
        bw = new BufferedWriter(osr);
        //init Input
        socketinstr = clientSocket.getInputStream();
        isr = new InputStreamReader(socketinstr);
        br = new BufferedReader(isr);
        System.out.println("Connected to " + host + ":" + String.valueOf(port));
        Thread recievingRoutineThread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true) {
                    String recievingString = null;
                    try{ recievingString = recieve();
                    }catch(Exception ex) {}
                    if(recievingString != null && recievingString != "")
                        sendRecievedMessageOutside(recievingString);
                }
            }
        });
        recievingRoutineThread.start();
    }

    private void sendRecievedMessageOutside(String message){
         //here i want to callback a method passed in the construcktor
        //just like in c#

    }

    String recieve() throws IOException {
        char[] buff = new char[65536];
        while (br.ready()) {
            br.read(buff);
        }
        return new String(buff);
    }

    public boolean send(String msg) {...}
public class Client {
    private final Consumer<String> messageConsumer;

    public Client( String ip, int port, Consumer<String>  messageConsumer) throws IOException {
        this.messageConsumer = messageConsumer;
        Thread recievingRoutineThread = new Thread( new Runnable() {
            @Override
            public void run() {
                while(true) {
                    String recievingString = null;
                    try{ recievingString = recieve();
                    }catch(Exception ex) {}
                    if(recievingString != null && recievingString != "")
                        sendRecievedMessageOutside(recievingString);
                }
            }
        } );
        recievingRoutineThread.start();
    }
    private void sendRecievedMessageOutside(String message){
        messageConsumer.accept( message );
    }
}