我试图弄清楚如何在 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/
任何有关如何做到这一点的提示将不胜感激。谢谢!克里斯