二十日,兩軍在康郎山(今江西鄱陽湖內)湖麵遭遇。時陳軍巨艦聯結布陣,展開數十裏,“望之如山”,氣勢奪人。朱元璋針對其巨艦首尾連接,不利進退,將己方艦船分為20隊,每隊都配備大小火炮、火銃、火箭、火蒺藜、大小火槍、神機箭和弓弩,下令各隊接近敵艦時,先發火器,次用弓弩,靠近敵艦時再用短兵器進行格鬥。次日,雙方展開激戰。朱軍大將徐達身先士卒,率艦隊勇猛衝擊,擊敗陳軍前鋒,斃敵1500人,繳獲巨艦一艘。俞通海乘風發炮,焚毀陳軍20餘艘艦船,陳軍被殺和淹死者甚眾。但朱軍傷亡也不少,尤其是朱元璋座艦擱淺被圍,險遭不測。戰鬥呈膠著狀態。從早晨至日暮,雙方鳴金收兵,戰鬥告一段落,雙方互有傷亡,不分勝負。
二十二日,朱元璋親自率領水師出戰。但陳艦巨大,朱軍艦小不能仰攻,接連受挫。這時朱元璋及時采納了部將郭興建議,決定改用火攻破敵。黃昏時分湖麵上吹起東北風,朱元璋選擇勇敢士兵駕駛7艘漁船,船上裝滿火藥柴薪,迫近敵艦,順風放火,風急火烈,迅速蔓延。一時烈焰飛騰,湖水盡赤,轉瞬之間燒毀陳軍數百艘巨艦,陳軍死傷過半,陳友諒的兩個兄弟及大將陳普略均被燒死。朱元璋揮軍乘勢發起猛攻,又斃敵2000餘人。二十三日,雙方又有交鋒,陳友諒瞅準朱元璋旗艦展開猛攻。朱元璋剛剛移往他艦,原艦便被陳軍擊碎。二十四日,俞通海等人率領6艦突入陳軍艦隊,勇敢馳騁,勢如遊龍,如入無人之境。朱軍士氣大振,發起猛烈攻擊。最後,陳軍不支敗退,遺棄的旗鼓器仗浮蔽湖麵。陳友諒隻得收攏殘部,轉為防禦,不敢再戰。
當天晚上,朱元璋乘勝進扼左蠡(今江西都昌西北),控製江水上遊,陳友諒亦退保諸磯(今江西星子南)。兩軍相持3天,陳軍屢戰屢敗,形勢漸趨不利。陳友諒兩員大將見大勢已去,於是投降了朱元璋,陳軍內部軍心動搖,力量更加削弱。陳友諒又氣又惱,下令把抓到的俘虜全部殺掉以泄憤。
朱元璋卻反其道而行之,將俘虜全部送還,並悼死醫傷,瓦解陳軍士氣,從而大得人心。陳軍內部分崩離析,士氣更加低落。朱元璋判斷陳軍可能突圍退入長江,乃移軍湖口,在長江南北兩岸設置木柵,置大舟火筏於江中,又派兵奪取蘄州、興國,控製長江上遊,堵敵歸路,待機殲敵。
經過1個多月的對峙,陳友諒被困湖中,軍糧殆盡,計窮力竭。於是孤注一擲,冒死突圍,八月二十六日,由南湖嘴突圍,企圖進入長江退回武昌。行至湖口時,朱軍以舟師、火筏四麵猛攻,陳軍無法前進,複走涇江,又遭伏兵阻擊,左衝右突,打不開生路。陳友諒中箭而死,軍隊潰敗,5萬餘人投降。至正二十四年(1364年)二月,朱元璋攻下武昌,陳友諒兒子陳理投降,朱元璋的勢力擴大到原陳友諒的所屬地區。
此次水戰,從七月二十日開始到八月二十六日結束,前後曆時37天,其時間之長、規模之大,投入兵力、艦隻之多、戰鬥之激烈都是空前的。