diff --git a/Database/HandlerSocketClient.hs b/Database/HandlerSocketClient.hs
--- a/Database/HandlerSocketClient.hs
+++ b/Database/HandlerSocketClient.hs
@@ -23,6 +23,7 @@
   -- * Do Special Request
   runReqOpen,
   runReqFind,
+  runReqFindN,
   runReqInsert,
   runReqUpdate,
   runReqDelete
@@ -54,7 +55,20 @@
       if B.elem 10 s1
         then return s1
         else fmap (B.append s1) $ recvOneR sock maxlen
+recvN :: Socket -> Int -> Int -> IO [B.ByteString]
+recvN sock maxlen count = do
+  all <- recvNR sock maxlen count
+  return $ init $ B.split 10 all
 
+recvNR :: Socket -> Int -> Int -> IO B.ByteString
+recvNR sock maxlen todo
+  | todo <= 0 = return B.empty
+  | otherwise = do
+      s1 <- recv sock maxlen
+      if B.null s1
+        then return s1
+        else fmap (B.append s1) $ recvNR sock maxlen $ todo - (B.count 10 s1)
+
 escapeW :: [Word8] -> [Word8]
 escapeW [] = []
 escapeW (x:xs) = if x < 16 then 1:(0x40+x):(escapeW xs) else x:(escapeW xs)
@@ -137,20 +151,29 @@
 runReqOpen :: HandSock -> String -> String -> String -> String -> IO Bool
 runReqOpen hs db tb ind cs = runReqBool hs $ makeReqOpen db tb ind cs
 
+mygroup :: Int -> [a] -> [[a]]
+mygroup _ [] = []
+mygroup i xs = l:(mygroup i r) 
+  where (l,r) = splitAt i xs
+
+splitFindResult :: [String] -> [[String]]
+splitFindResult ss =
+  case ss of
+    ("0":i:xs) -> mygroup (read i) xs
+    _ -> []
+    
 -- | Do \'find\' request. Returns at most lim results.
 runReqFind :: (Integral a) => HandSock -> String -> String -> a -> IO [[String]]
 runReqFind hs op v lim = do
   let req = makeReqFind op v lim
   sendAll (getSocket hs) req
-  resp <- fmap decodeResp $ recvOne (getSocket hs) 4096
-  case resp of
-    (o:i:xs) -> return $ mygroup (read i :: Int) xs
-    _ -> return []
-  where
-    mygroup _ [] = []
-    mygroup i xs = l:(mygroup i r) 
-      where (l,r) = splitAt i xs
+  fmap (splitFindResult . decodeResp) $ recvOne (getSocket hs) 4096
 
+runReqFindN :: (Integral a) => HandSock -> String -> [String] -> a -> IO [[[String]]]
+runReqFindN hs op vs lim = do
+  mapM_ (\v -> let req = makeReqFind op v lim in sendAll (getSocket hs) req) vs
+  map (splitFindResult . decodeResp) `fmap` recvN (getSocket hs) 4096 (length vs)
+  
 -- | Do \'insert\' request, insert one record at a time.
 runReqInsert :: HandSock -> [String] -> IO Bool
 runReqInsert hs vs = runReqBool hs $ makeReqInsert vs
diff --git a/HandlerSocketClient.cabal b/HandlerSocketClient.cabal
--- a/HandlerSocketClient.cabal
+++ b/HandlerSocketClient.cabal
@@ -1,5 +1,5 @@
 Name:              HandlerSocketClient
-Version:           0.0.3
+Version:           0.0.4
 Synopsis:          Haskell implementation of a HandlerSocket client (API).
 Description:       This package implemets API for a HandlerSocket client.
 homepage:          https://github.com/wuxb45/HandlerSocket-Haskell-Client
diff --git a/README b/README
--- a/README
+++ b/README
@@ -30,5 +30,7 @@
   putStrLn $ show r5
   r6 <- runReqGeneric hs ["0","+","2","555","999"]
   putStrLn $ show r6
+  r7 <- runReqFindN hs "=" ["1","2","3","4"] 1
+  putStrLn $ show r7
 
 
