清仏戦争
フランス政府が焦る中、清朝は前線から撤兵を拒否。清では攘夷運動が各地で発生し、特に運動が盛んだった広東省では広州などでフランスのみならず欧州商人全体への襲撃が発生、各国が自国住民保護の為に砲艦を派遣した。
清帝国との直接戦争を予期したフランスはドイツ政府に鎮遠・定遠の建造を遅らせるように要請、前線ではトンキンデルタで幾つかの新たな拠点を確保して勢力を拡大。黒旗軍との戦闘がいずれ清朝とも戦うことになると予想したが、早期にトンキン全土を併合すれば既成事実的に相手方が領有を認めるだろうと判断した。トンキンでの新たな攻勢はクールベ提督を総司令官に据え、1883年12月に1万を越す大軍がソンタイ(山西)川に向かって攻撃を開始した。
ソンタイ川の戦い(英語版)は最大の激戦だった。清軍やベトナム人兵士は余り戦いの趨勢に関与せず、3,000人の黒旗軍が主力として戦い、12月14日にフランス軍の攻勢を一旦は撃退した。黒旗軍がクールベ軍の追撃に失敗する中、体勢を立て直したクールベは、大砲による援護を行いながら12月16日にソンタイ川へ二度目の突撃を敢行。同日午後5時、フランス軍外人部隊と海兵部隊の一部がソンタイ川の防衛線を突破して市内に突入、劉永福は残存軍を連れてソンタイ川後方へと撤退した。
海戦が続く中、陸軍がトンキン戦線で清国軍と黒旗軍への攻撃を繰り返していた。トンキン遠征部隊の総司令官・シャルル・テオドール・ミロー将軍が病に倒れたため、1884年9月に副官のブリエール・ド・リール将軍に交代。紅河デルタ付近への大規模な清国軍の攻撃に対処した。
1884年9月、広西軍の遠征隊がランソンを越えフランス軍の砲艦2隻を奇襲、フランス軍は敵が本格的に集合する前に3,000人の兵士を集め反撃した(ケップ攻勢(英語版))。白兵戦を含む激しい戦いの末、三派に分けられたフランス軍は各所で広西軍を撃破した。
敗れた広西軍は、後方のドンソン(東山)に撤退。対するフランス軍もケップ攻勢で得た拠点(ドンソンから2,3マイル)に陣地を築いて広西軍と戦闘。11月19日に黒旗軍2,000名が移動中のフランス軍700名を攻撃した(Yu Ocの戦い(英語版))が撃退された。更に広東省に拠点を持つ清国の民兵部隊を紅河デルタから追い払うことにも成功して、デルタ東方の掌握を達成した。平行してアンナン(安南)のベトナム人民兵部隊の掃討も完了し、フランス軍は紅河デルタ占領へと駒を進めた。