java - 基于事件的网络

标签 java sockets

我设置了一个简单的服务器和客户端,服务器等待客户端发送内容,然后发送响应。但缺点是两者都必须监听套接字才能接收数据。如果我希望它的沟通更加灵活怎么办?我正在考虑基于事件的东西,所以每次套接字收到一些东西时,它都会调用一个方法来处理它,而不是暂停程序来等待 socket.nextLine()。

这是我的服务器代码:

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();

您必须在封闭类中创建in 字段。

这将导致您的程序执行,当它收到数据包时,它将调用 someMethod()

当然,这会带来许多与多线程相关的问题,但这确实是实现您想做的事情的唯一方法。

关于java - 基于事件的网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996083/

相关文章:

java - Hadoop java mapper -copyFromLocal 堆大小错误

java - Spring Batch-集成复用组件

python - 在 Python 中获取网络地址和网络掩码

sockets - 使用 SIOCGIFINDEX 获取接口(interface)索引时出错

Java 服务器套接字故障

c++ - 选择功能是否在内部调用 tcp 连接?

java - 如何用另一个 JList 的数据填充 JList

java - Tinkerpop:创建顶点后设置标签

java - Spring通用bean工厂

sockets - UDP SetWriteBuffer 和 SetReadBuffer 如何处理操作系统的缓冲区?