漢王兵敗彭城後向西撤退,行軍中派人尋求家屬,家屬也逃走了,沒有互相碰見。戰敗後就隻找到了孝惠帝,六月,漢王立他為太子,大赦罪人。命令太子駐守櫟陽,諸侯國人在關中的都集中在櫟陽守衛。引水灌廢丘,廢丘投降,章邯自殺。把廢丘改名為槐裏。於是命令祠官祭祀天、地、四方、上帝、山川,以後按時致祭。漢王又征發關內士卒登城守衛邊塞。
這時九江王黥布與龍且作戰,沒有取勝,和隨何潛行歸漢。漢王漸漸地征集了一些士卒加上各路將領和關中兵的增援,因此軍勢大振於滎陽,在京、索之間擊破了楚軍。
三年,魏王豹請假回去省視父母的疾病,到了魏地就斷絕了黃河渡口,叛漢歸楚。漢王使酈生勸說魏豹,魏豹不聽。漢王派遣將軍韓信進攻魏豹,大破魏軍,俘虜了魏豹,於是平定了魏地,設置了三個郡,名叫河東、太原、上黨。漢王命令張耳和韓信向東攻下井陘,進擊趙地,殺了陳餘、趙王歇。第二年,漢王封張耳為趙王。
漢王駐軍在滎陽南麵,修築甬道與黃河相連,以便取用敖倉的糧食,並與項羽對峙了一年多。項羽多次奪取了漢軍甬道,漢軍缺少糧食,項羽於是圍攻漢王。漢王請求講和,劃分滎陽以西的土地歸漢。項王沒有同意。漢王憂慮,就采取陳平的計策,給陳平黃金四萬斤,用來離間楚國君臣。於是項羽對亞父產生了懷疑。亞父這時勸項羽乘勢攻下滎陽,等到他知道已被懷疑,就很生氣,推托自己年老,要求乞身引退,回家鄉當老百姓。項羽答應了,亞父沒有到達彭城就死了。
漢軍斷絕了糧食,就在夜間從東門放出女子二千多人,披戴鎧甲,楚軍便四麵圍擊。將軍紀信乘坐漢王的車駕,偽裝成漢王,欺騙楚軍。楚軍都高呼萬歲,爭赴城東觀看,因此漢王能夠與幾十騎兵出西門潛逃。漢王命令禦史大夫周苛、魏豹、樅公留守滎陽,將領和士卒不能隨從的,都留在城中。周苛、樅公商量說:“魏豹這個叛國之王,很難和他共守城池。”因此就殺死了魏豹。
漢王逃出滎陽進入函穀關,收集士卒,想再次東進。袁生勸漢王說:“漢與楚在滎陽相持了幾年,漢軍常處於困境,希望君王從武關出去,項羽肯定引兵向南行進,君王深溝高壘,讓滎陽、成皋之間得到休息。派韓信等安輯黃河以北的趙地,聯合燕、齊,君再赴滎陽,也為時不晚。這樣,楚軍多方設防,軍力分散,漢軍得到休整,再與楚軍作戰,肯定可以打破楚軍了。”漢軍采納了他的計策,出兵宛縣、葉縣之間,與黥布在進軍中收集兵馬。
項羽聽說漢王在宛縣,果然帶兵南下。漢王堅壁固守,不和他交戰。這時彭越渡過睢水,與項聲、薛公在下邳作戰,彭越大敗楚軍。於是項羽率軍向東攻打彭越,漢王也率兵向北駐軍成皋。項羽已經取勝,趕走了彭越,得知漢軍又駐紮在成皋,就又領兵西進,攻克滎陽,殺了周苛、樅公,俘虜了韓王信,於是進圍成皋。
漢王逃走了,單身一人與滕公同乘一輛車出了成皋玉門,向北渡過黃河,馳至修武住了一夜。自稱為使者,早晨進入張耳、韓信的營中,奪取他們的軍隊,就派張耳去北邊趙地收集更多的兵力,派韓信東進攻齊。漢王得到韓信的軍隊後,軍威又振作起來。率軍來到黃河岸邊,向南進發,在小修武南麵讓士卒吃飽喝足,打算與項羽再一次交戰。郎中鄭忠勸阻漢王,讓他挖深溝道高堆城牆,不要和項羽交鋒。漢王采用了鄭忠的計策,派盧綰、劉賈率兵兩萬人,幾百個騎士,渡過白馬津,進入楚地,與彭越在燕縣城西又打敗了楚軍,隨後又攻下梁地十多座城邑。
淮陰侯已經接受命令向東進軍,在平原沒有渡過黃河。漢王派酈生去說服齊王田廣。田廣背叛了楚,與漢講和,一起攻打項羽。韓信采用蒯通的計策,突然襲擊,打敗了齊國。齊王烹殺了酈生,向東逃到高密。項羽聽到韓信已經全部利用黃河以北的兵力打垮了齊、趙,而且要攻打楚軍,就派龍且、周蘭前去阻擊。韓信與楚交戰,騎兵將領灌嬰配合出擊,大敗楚軍,殺了龍且。齊王田廣投奔彭越。在這個時候,彭越領兵駐紮在梁地,前來騷擾楚軍,斷絕它的糧食。
四年,項羽對海春侯大司馬曹咎說:“謹慎防守成皋。如果漢軍挑戰,千萬小心,不要應戰,不讓漢軍東進就行了。我十五天一定平定梁地,再與將軍會合。”於是就進軍攻打陳留、外黃、睢陽,都拿了下來。漢軍果然屢次向楚軍挑戰,楚軍不肯出戰。漢軍派人辱罵了楚軍五六天,大司馬十分氣憤,讓士卒渡過汜水。士卒渡過一半,漢軍出擊,大敗楚軍,全部繳獲了楚國的金玉財寶。大司馬曹咎、長史司馬欣都自刎在汜水上。項羽到達睢陽,聽到海春侯兵敗,就帶兵返回。漢軍正在滎陽東麵圍攻鍾離眛,項羽一到,漢軍全部撤走到險阻地帶。