當時駐守旅順的清軍有前兵三營、慶字軍五營、馬隊一哨、桂字軍五營、和字軍四營,共8000多人。金州之役後,由金州大連灣敗退到旅順的有拱衛軍、懷字軍約3600多人,捷勝營數百人。旅順守軍合計33營12700餘人(不包括水雷營、魚雷營及守衛倉庫、衙門和道台親兵),但其中約9000人為新募之伍,倉促成軍,未經過訓練和戰陣。
17日,進攻旅順的日軍右翼縱隊經南關嶺、牧城驛到達營城子(在土城子東北約14公裏)。為了主動阻擊進犯之敵,徐邦道會同薑桂題、程允和所部馬步5000餘人,再往土城子迎戰。
18日晨7時,日軍搜索騎兵第一大隊第二中隊由營城子出發,10時到達三澗堡(土城子北1公裏),發現清軍馬步200餘人占領了土城子南方高地。
日軍騎兵搜索隊司令官秋山好古正準備下令發動進攻,發現清軍兵力在陸續增加。
10時40分已增加到五六百人,並尚在陸續增加。
秋山好古見勢不妙,正準備掉頭逃跑,清軍已分東西兩路取鉗形攻勢包抄過來。一路由正麵前進,到達土城子東北,進攻日軍左翼;另一路占領山澗堡日軍陣地南麵的蔣家屯和西南方的傅家甸子。逼近200~300米處,向日軍發起猛烈進攻,當即將騎兵大尉淺川敏靖擊傷。
日軍狼狽後撤。幸有步兵第三聯隊第三中隊趕來相救,日本騎兵才得以退出重圍。但清軍800餘人又從土城子東麵的周家屯向日軍左側背後包抄過來,日軍處境十分危險。
這時,由營城子出發的日軍第三聯隊第一大隊在丸井正亞少佐率領下,到達雙台溝(土城子東北約9公裏)。
秋山少佐急忙派人求援,丸井立即率隊趕來。其前衛第三中隊剛至長嶺子(雙台溝西南約4公裏),就被由傅家甸子和周家屯兩路包抄過來的清軍團團圍住。
日軍企圖向許家窯(長嶺子西2公裏)潰退,被清軍截住退路。日軍搜索騎兵及第三中隊瀕於被殲滅的邊緣。丸井少佐見狀,急令第二、第四兩個中隊增援。
雙方對峙,“戰鬥愈加激烈”。
正午,清軍在長嶺子南2公裏的東北溝東南高地上架起兩門大炮,向日軍猛轟。
步兵和馬隊也向日軍左側發起進攻,日軍見勢不妙,便集中兵力,準備冒險突圍逃命,但徐邦道所部騎兵已截住日軍退路,將敵軍馬隊割成數段,使敵陷入重重包圍之中。
敵派步兵援救亦陷入重圍。清軍展開新的攻勢,戰鬥更加激烈起來。
接著日軍第二、第四中隊逐漸向雙台溝敗退,日軍狼狽逃竄,傷亡慘重,最後敗退到雙台溝以北。
土城子反擊戰是甲午戰爭爆發以來清軍陸軍的一次重大勝利,給了日軍以沉重打擊。此役,據日軍自己公布死傷合計46人。
這次勝利沉重地打擊了日軍那種驕橫不可一世的侵略氣焰,粉碎了日軍不可戰勝的神話。
日軍自己也不得不承認:土城子戰鬥的失敗是對“日本軍隊最有效刺激的良藥”,認識到今後對清軍“絕不能妄加蔑視,戰陣必須慎重戒備”。