Posted on 2009-11-17 14:53
瘋狂 閱讀(5946)
評(píng)論(3) 編輯 收藏 所屬分類:
java
最近項(xiàng)目中想通過java來調(diào)用c來啟動(dòng)驅(qū)動(dòng)程序 ,由于項(xiàng)目是部署在winCE上(內(nèi)存30多m),初步定下使用socket,所以就看了下輕量級(jí)的開源xSocket ,感覺用起來挺簡(jiǎn)單,而且性能和效率不錯(cuò)。apace mina 也很強(qiáng)大但是功好多功能用不上也就沒用。
xSocket是一個(gè)輕量級(jí)的基于nio(since jdk1.5)的服務(wù)器框架用于開發(fā)高性能、可擴(kuò)展、多線程的服務(wù)器。該框架封裝了線程處理、異步讀/寫等方面。
使用也很簡(jiǎn)單 :
server端:
new Server(8090,new ServerDataHander()).start();
client端:
new NonBlockingConnection("localhost", 8090,new ClientDataHander());
其中ServerDataHander,ClientDataHander為自己定義類,都可以實(shí)現(xiàn)接口IConnectExceptionHandler, IConnectHandler, IDisconnectHandler等接口:通過重寫回調(diào)函數(shù)來處理數(shù)據(jù):操作相當(dāng)方便。例如:
public boolean onData(INonBlockingConnection connection)
throws IOException, BufferUnderflowException,

ClosedChannelException, MaxReadSizeExceededException
{
byte[] data = connection.readBytesByLength(connection.available());

//hander
.
return true;
}

@Override
public boolean onConnectException(INonBlockingConnection connection,

IOException ioe) throws IOException
{
chatServer.area.append("error connect please try again
\r\n");
return true;
}

@Override
public boolean onConnect(INonBlockingConnection connection)
throws IOException, BufferUnderflowException,

MaxReadSizeExceededException
{
chatServer.area.append("client["+connection.getRemoteAddress()+"] is connected
\r\n");
return true;
}

@Override
public boolean onDisconnect(INonBlockingConnection connection)

throws IOException
{
chatServer.area.append("client["+connection.getRemotePort()+"] is disconnected
\r\n");
return true;
}
下面是自己做的一個(gè)例子:
最終界面:
server端:

客戶端:

可運(yùn)行代碼下載(解壓可用):
/Files/freeman1984/xsockettest.rar