0

我试图弄清楚如何在 Java 中的套接字之间发送数据(这是一个更大项目的一部分,一旦我能解决这个问题,我会回来回答我之前的两个与此相关的问题..)。我想用Java异步连接一个客户端和一个服务器套接字,然后在它们之间发送消息,并得到一个回调,比如当我从客户端向服务器发送消息时。

我想我已经设法让设置正常工作。这是我的代码:

private AsynchronousServerSocketChannel socListener;
private AsycnchrnonousSocketChannel socClient;

//This is the GUI callback for the button that initiates the socket server
private void button_StartSocketServerActionPerformed(ava.awt.event.ActionEvent evt)
{
    try{
        InetAddress ipLocal= InetAddress.getLocalHost(); 
        InetSocketAddress ipSocket=new InetSocketAddress(ipLocal,8221);

        m_socListener= AsynchronousServerSocketChannel.open().bind(ipSocket);

        m_socListener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() 
                                   {
                                       @Override
                                       public void completed(AsynchronousSocketChannel ch, Void att) 
                                       {
                                            // accept the next connection
                                            m_socListener.accept(null, this);
                                            // handle this connection
                                       }
                                       @Override
                                       public void failed(Throwable exc, Void att)  { }
                                   }
                             );
        }
        catch (Exception e){ 
        }
}

//This is the GUI callback for the button that initiates the client socket
private void button_StartClientSocketActionPerformed(java.awt.event.ActionEvent evt) 
{
     try
     {
        socClient=AsynchronousSocketChannel.open();

        InetAddress ipLocal= InetAddress.getLocalHost();
        InetSocketAddress ipSocket=new InetSocketAddress(ipLocal,8221);
        socClient.connect(ipSocket, null, new CompletionHandler<Void,Void>() 
                                   {
                                       @Override
                                       public void completed(Void att1, Void att2) 
                                       {
                                            // handle this connection
                                       }
                                       @Override
                                       public void failed(Throwable exc, Void att) {}
                                   }
                            );
    }
    catch (Exception e){  
    }
}

为了简化测试,我将服务器和客户端包含在同一个文件中。

因此,假设连接已成功建立,并且我有一个正在将数据写入服务器套接字的计时器(例如)进程,我想让客户端套接字“侦听”从服务器发送的这些新数据和然后在发生写入时生成回调(无需执行诸如通过计时器和 while 循环定期检查以检查是否已添加新数据之类的操作)。这可以在 C# 中完成,并且可以在以下位置获得一个很好的教程:http: //www.developerfusion.com/article/3918/socket-programming-in-c-part-1/2/

任何有关如何做到这一点的提示将不胜感激。谢谢!克里斯

4

1 回答 1

0

您可以使用 RMI 来完成此操作,可以在此处找到文档: http ://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

有了这个,您的服务器可以根据需要通知您的客户端。

于 2013-04-19T17:42:58.303 回答