我正在为将来计划使用的服务器制作基本大纲。如果你愿意的话引擎。
基本上,我正在创建一个客户端/服务器类,这些类将被提取到一个jar中,稍后我会将它们包含在类路径中,就像使用lwjgl一样。
在我的服务器类中,它需要在客户端连接到它时创建一个新的类对象。 例如:
Thread t = new Thread(new MainServerThread(clientSocket));
现在,最初,这个MainServerThread()是由我制作的,并实现了Runnable。现在,由于需要如何,MainServerThread()类型类需要由引擎外部的程序员进行。
我的问题是,如果我创建一个程序员可以实现的接口,并运行它,
test
,我可以让我的服务器使用该类作为参数吗? (我的问题很难写,所以这里有一个例子)SERVER ENGINE(我正在制作的):
public class Server{
public Server(ServerThread st){ //serverthread is the name of my interface
st.haha();
}
}
客户端使用我的服务器:
public class test implements ServerThread{ //all the methods are imported
public test(){
new Server(this);
}
public void haha(){
System.out.println("hi");
}
}
现在为什么我不出去测试这个?我做了,它对我没有用......
那么我如何才能达到这种性质呢?
编辑:感谢您的快速解答!我现在想弄清楚为什么它不能开始......但我会尽快接受答案!
答案 0 :(得分:1)
1)您可以使您的界面扩展可运行的界面:
public interface MyInterface extends Runnable { ... }
2)是的,您可以像在示例中那样new Server(this)
。
答案 1 :(得分:1)
1)接口是否也可以使客户端实现runnable?比如,接口可以实现runnable然后传递吗?
是的。您可以使interface
继承其他interface
的属性。
public interface IClient extends Runnable
2)可以实现我的接口的类,假设该类被称为test,我可以让我的服务器使用该类作为参数吗? (我的问题很难写,所以这里有一个例子)
是的,你可以,你提供的代码应该有用。
但我认为你想做的是......
请记住,重要的是你要记住模型。该模型是client-server
模型。这意味着,服务器充当所有客户端的交换机,但它是从服务器请求连接的客户端。它就是这样的。
public class Client implements IClient
{
public void haha()
{
// Prints a value to the server.
getConnection().writeline("hi");
}
public BufferedWriter getConnection()
{
// Here you request a connection from the server.
String ip = "10.20.50.60"; // Example.
// Get the connection via your own classes.
BufferedWriter out = new BufferedWriter(getOutputStream(ip));
return out;
}
private OutputStream getOutputStream(String ip)
{
// Logic to get the socket stream pointing to the server.
}
}
并且server
将有一个方法来接收这些数据,并决定如何处理它,并且这样做,它需要在客户端写入的流上监听slave
。从属侦听,获取数据并传递给逻辑。逻辑决定要做什么,并传递到输出到适当流的写入类。