вузькому проході між озером і підступаючими до нього горами була знищена 30-тисячна римська армія разом з її полководцем Фламінієм. Зазнав поразки і другий консул. У Римі почалася паніка, всі чекали походу карфагенян на Рим. Але Ганнібал пройшов в Південну Італію.
Римляни передали командування призначеному диктатором Квінту Фабію, названому згодом Кунктатором («Повільним»). Він був першим з римських полководців, що почали шукати нові способи ведення війни. Він уникав великих зіткнень, виснажуючи ворога дрібними сутичками. Однак стратегія диктатора викликала невдоволення в Римі.
У 216 р. консулами були вибрані Гай Теренцій Варрон, прихильник наступальної тактики, і Емілій Павел. Римляни вирішили дати Ганнібалу генеральну битву. 2 серпня 216 р. армії зустрілися в Апулії, на рівнині біля Канн. Римляни мали 80 тис. піхоти і 6 тис. кінноти, Ганнібал – 40 тис. піхоти і 10 тис. кінноти. Битва закінчилася страшною поразкою римлян: римська армія була оточена, понад 70 тис. чоловік загинули на полі бою. Це була третина всіх військових ресурсів Рима і союзників. У битві загинув консул Емілій Павел. Варрон втік із залишками армії.
Поразка поставила Рим на грань катастрофи, і тільки ціною неймовірних зусиль сенат зумів врятувати положення. Були мобілізовані всі наявні сили; крім того були сформовані два нових легіони з числа здатних носити зброю рабів. Ці сили прикрили підступи до столиці.
Іншим небезпечним наслідком каннського розгрому був перехід на сторону Ганнібала півдня Італії: передусім самнитів, луканів і апулів; восени 216 р. до карфагенян приєдналася Капуя. Навпаки, Середня Італія залишилася вірна Риму.
Kанни були для Рима хорошим уроком. Уникаючи великих битв і виснажуючи противника дрібними сутичками, римляни повільно, але вірно тіснили Ганнібала на південь.
Проте незабаром Рим спіткали нові невдачі. План Ганнібала по створенню великого антиримського союзу почав здійснюватися. Війна охопила все Західне Середземномор'я. У 211 р. карфагеняни, стягши підкріплення, знищили римські війська в Іспанії; влітку 214 р. в Сиракузах перемогла прокарфагенська партія. Цим скористалися карфагеняни, що зуміли захопити великий шматок острова. Приблизно в цей же час Ганнібал уклав союз з македонським царем Філіпом V, який почав військові дії проти Рима.
Римляни захищалися. Їм вдалося створити сильну коаліцію грецьких держав, яка нейтралізувала Філіпа. Після дворічної облоги римляни взяли в 211 до н. е. Сиракузи, що наполегливо чинили опір. Під час грабежу загинув організатор оборони Сиракуз знаменитий вчений Архімед. Карфагеняни були вибиті з Сицилії. У Італії римляни осадили Капую і взяли її в 211 р., причому Ганнібал не зміг надати допомоги своєму союзнику, хоч і спробував зробити це. З метою відвернення римських військ від Капуї він здійснив похід на Рим, під час якого під'їхав на коні до самих міських воріт. Поява карфагенського війська під Римом викликала паніку в місті. Вислів «Ганнібал біля воріт!» увійшов в приказку як позначення крайньої зовнішньої небезпеки для держави. Але взяти Рим Ганнібал навіть не намагався, розуміючи, що у нього для цього абсолютно недостатньо сил. Падіння Капуї сприяло відходу від Ганнібала його союзників в Італії. Через два роки римляни оволоділи Тарентом.
У 210 р. до н. е. Рім перейшов до наступу, який очолив молодий полководець Публій Сципіон, син консула 218 року. Будучи направлений в Іспанію, він захопив центр іспанської держави Баркидів – Новий Карфаген, а в 207 р. витіснив карфагенян з Іспанії.
У Італії війна затяглася. Кожний невеликий успіх в боротьбі з Ганнібалом коштував римлянам великих втрат. Адже вже багато років йшла війна на території Італії: вона вела до повного виснаження людських ресурсів Рима, його економіка знаходилася в занепаді. Стратегія Ганнібала ледве не привела до загибелі Рима. У 208 р. над римлянами нависла смертельна небезпека: сильна армія Гасдрубала (брата Ганнібала) перейшла Альпи і рушила на допомогу останньому. Тільки умілий маневр римлян врятував їх положення. Навесні 207 р. на р. Метаврі карфагеняни були розбиті. Гасдрубал загинув у бою.
Сципіон, що повернувся з Іспанії, запропонував новий план дій. Він переконав римлян перенести війну в Африку. У 204 р. до н. е. армія Сципіона висадилась недалеко від Утіки. Ряд успіхів римлян змусив карфагенський уряд відкликати Ганнібала з Італії. Восени 202 р. до н.е. Сципіон і його союзник нумідійский цар Масинісса в битві біля Заме, південніше Карфагена, отримали перемогу над Ганнібалом. Карфаген був переможений.
У 201 р. до н. е. Рим і Карфаген уклали мир, який ознаменував собою остаточну перемогу Рима і повну поразку Карфагена. Останній відмовився від всіх своїх володінь поза Африкою, видав всі військові судна і слонів, сплатив контрибуцію в 10 тис. талантів. Крім того, Карфаген був позбавлений права вести війну без дозволу Рима. Нарешті, Рим допоміг посилитися південно-західному сусіду Карфагена – Нумідії, на чолі якого стояв Масинісса, найзліший ворог Карфагена.
Перемога над Карфагеном зробила Рим самою могутньою державою Середземномор'я і розв'язала йому руки для подальшого наступу на Сході. Тут його основними противниками були Селевкідське царство, очолюване здібним правителем Антіохом III, і Македонія. У боротьбі з цими державами Рим майстерно використав їх складні відносини з грецькими полісами і вів тонку дипломатичну гру.
У 200 р. до н. е. римляни скористалися конфліктом македонського царя Філіпа V з Родосом і Пергамом і виступили на стороні останніх. У ході Другої Македонської війни (200 – 197 рр. до н. е.) римляни отримали перемогу біля Киноськефалів в Фессалії (197 р. до н е.)