Java 基于事件的网络
我已经设置了一个简单的服务器和客户机,其中服务器等待客户机发送内容,然后发送响应。但缺点是两者都必须监听套接字才能接收到某些内容。如果我想让它在交流中更灵活些呢?我在想一些基于事件的东西,所以每次套接字收到一些东西时,它都会调用一个方法来处理它,而不是暂停程序等待socket.nextLine() 以下是我的服务器代码:Java 基于事件的网络,java,sockets,Java,Sockets,我已经设置了一个简单的服务器和客户机,其中服务器等待客户机发送内容,然后发送响应。但缺点是两者都必须监听套接字才能接收到某些内容。如果我想让它在交流中更灵活些呢?我在想一些基于事件的东西,所以每次套接字收到一些东西时,它都会调用一个方法来处理它,而不是暂停程序等待socket.nextLine() 以下是我的服务器代码: try{ ss = new ServerSocket(port); s = ss.accept(); in = new Scanner(s.getIn
try{
ss = new ServerSocket(port);
s = ss.accept();
in = new Scanner(s.getInputStream());
out = new PrintWriter(s.getOutputStream(), true);
while(!s.isClosed()){
String input = in.nextLine();
handleInput(input);
}
} catch (Exception e){}
在handleInput()中,我向客户机发送一个响应。如果您希望在服务器发送数据包时,客户机执行某些操作,则使用多线程
Thread t = new Thread(new Runnable() {
public void run() {
someMethod(in.nextLine());
}
});
t.start();
您必须在中在封闭类中创建一个字段
这将导致您的程序执行,当它收到数据包时,它将调用someMethod()
当然,这会带来许多与多线程相关的问题,但这确实是实现所需的唯一方法。您可以看看SocketChannel()。我不确定它是否正是你想要的。但它们非常有效。你现在甚至在做驱动型网络——你在做任何事情之前都在等待输入。我建议您创建一个完整的单独类(threadit)来处理连接。每次你接受一个连接时,把它传递给那个类,然后启动一个线程,这样你的服务器就可以继续监听。这是一个很难在文章中提出的主题,因为你可以在架构上做很多事情。这里有一个关于使用选择器的教程,您可以检查哪些套接字已准备好读/写。