Когда продрогшие легионы построили боевой порядок на равнине, Ганнибал бросил против них опытных балеарских стрелков, которым Лонг противопоставил новобранцев-велитов. Последние не выдержали атаки и быстро отступили за линию тяжеловооруженных воинов. Те, в свою очередь, прорвали фронт галльской пехоты, составлявшей центр карфагенской армии. Фланги же римлян подверглись атаке нумидийской конницы и засадного отряда и были разбиты. Как писал Полибий, «задние ряды римлян, сражавшихся в центре, сильно пострадали от нападения воинов из засады; а те, что были впереди, воодушевляемые трудностью положения, одержали верх над кельтами и частью ливийцев и прорвали боевую линию карфагенян». Только 10 тысяч римлян в центре смогли пробиться сквозь галльскую пехоту и отступить, сохранив боевой порядок. Остальные погибли, были пленены или разбежались. Пленных из числа римских союзников Ганнибал отпустил без выкупа, надеясь привлечь их на свою сторону для борьбы с Римом.
Перед Ганнибалом открылась дорога на Рим, но он предпочел зимовать в Галлии.
После победы при Тразиментском озере Ганнибал опять не пошел на Рим, а отправился в богатую Апулию. Из Апулии его войско отправилось в Самний, а затем в Кампанию. Фабий Максим, уклоняясь от сражения, преследовал Ганнибала по пятам. Силы Ганнибала таяли в мелких стычках с неприятелем и от болезней. Между тем командование римской армией от Фабия было передано консулам Луцию Эмилию Павлу и Гаю Терренцию Варрону. Общественность ждала от них решительных действий.
Летом 216 года карфагеняне захватили продовольственный склад римлян в укреплении вблизи города Канны. Ганнибал расположился здесь лагерем, рассчитывая, что противник попытается отбить склад. Римские легионы, действительно, двинулись к Каннам и остановились в 2 км от города 1 августа Варрон вывел войска в поле. Ганнибал еще на марше атаковал римлян конницей и пращниками. Однако Варрон успел развернуть тяжеловооруженных воинов, которые с помощью велитов отразили атаку. На следующий день командование принял Павел. Две трети армии он расположил на левом берегу реки Ауфид, а одну треть — на правом берегу, в 2 км от основного лагеря. Ганнибал же всю свою армию развернул против главных сил римлян. С утра 2 августа римские легионы из обоих лагерей выстроились в боевой порядок на левом берегу Ауфида. На левом фланге, примыкая к реке, стояла римская конница, на правом — конница союзников. Составлявшая центр пехота имела более глубокий строй, чем обычно. Впереди стояла легкая союзная пехота. Ганнибал построил боевой порядок точно так же с флангов — кавалерию, в центре — тяжеловооруженную пехоту, а перед ней — пращников и стрелков из лука. В середину своей фаланги он поставил менее опытных галлов и иберов, по краям — закаленных в боях ливийцев. Карфагенский полководец, как утверждает Полибий, обратился к войскам с короткой речью: «С победою в этой битве вы тотчас станете господами целой Италии; одна эта битва положит конец нынешним трудам вашим, и вы будете обладателями всех богатств римлян, станете повелителями и владыками всей земли. Вот почему не нужно более слов — нужны дела».
Против 4-тысячной конницы римских союзников Ганнибал бросил 2 тысячи нумидийской кавалерии, а вот против 2 тысяч римских конников сосредоточил 8 тысяч человек тяжелой карфагенской («Священная дружина»), ливийской и легкой иберской кавалерии Карфагенская конница рассеяла римских всадников, а потом ударила с тыла по коннице римских союзников. Между тем римская пехота потеснила галлов в центре и попала под удар двух сильнейших ливийских крыльев. Римские легионы оказались в кольце. Вот как описывает финал битвы Тит Ливии: «Когда римлян оставалось уже немного и они изнемогали от усталости и ран, тогда они были обращены в бегство, затем все рассеялись и, кто мог, старались найти своих лошадей, чтобы бежать. Римляне бросились со всех сторон врассыпную. 7 тысяч человек прибежало в меньший лагерь, 10 тысяч — в больший, а почти 2 тысячи — в самую деревню Канны; эти последние немедленно были окружены Карфагеном и его всадниками, так как деревня Канны не была защищена никакими укреплениями. Другой консул (Варрон. — Авт.), случайно ли или намеренно, не присоединился ни к одному отряду беглецов, но приблизительно с 50 всадниками бежал в Венузию. Говорят, что было перебито 45 тысяч 500 пехотинцев, 2 тысячи 700 всадников и почти столько же граждан, сколько союзников…»