سلام .
الگوریتم ها رو باید خودتون پیاده سازی کنید . چون برنامه های چت از قانون خاصی ( به غیر از Protocol ها ) پیروی نمیکنن .
حتی شما میتونید خودتون یه Protocol خاص خودتون رو درست کنید و باهاش Peer هارو بهم ارتباط بدید .
اول اینکه برای مثال ۲ نفر بخوان با هم چت کنن و IP های پویا داشته باشن باید بین اینا یک جای ثابتی باشه که اول به اون رجوع کنن تا بتونن همدیگر رو پیدا کنن . پس یه IP ایستا یا همون Server باید این وسط باشه تا هر ۲ نقر (یا بیشتر) اول به اون وصل بشن بعد همدیگرو پیدا کنن .
حالا اگه سرور نداری جریان فرق داره . راهی عمومی برای اینکار نمیدونم . ولی من خودم اینکار رو میکردم (احتمالا بکارت بیاد)
مثلا داخل سایت هایی مثل tinypaste.com یه account درست میکردم . یه paste درست میکردم . و IP حال حاضر سیستمم ( که قرار بود Server بشه ) رو داخلش مینوشتم و قبلش و بعدش ۴ تا # میزاشتم (دلیلشو میگم جلوتر ) و ذخیره میکردم . و آدرس اون paste رو کپی میکردم و داخل برنامم به صورت یه رشته ی * const char نگه میداشتم .
داخل برنامه با یه socket به آدرسی که ساخته بودم (همونی که داخل * const char ذخیره کرده بودم ) وصل میشدم و با پروتکل HTTP داده های اون صفحه رو میخوندم . و دنبال اون ۴ تا # اولی میگشتم هر وقت پیداش کردم از آخر ۴تا# اول تا قبل ۴ تا # اخر رو میخوندم و داخل یه بافر نگه میداشتم و اینطور آدرس سرور بدست میومد .
برای Protocol های چت اینجارو نگاه کن : Online Chat
برای socket یا خودت بنویس یا میتونی از libcurl استفاده کنی .