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