سلام
یعنی باید کار کنه
!!!!!!!!!!!!!!!!

یک سیستم هستش که هم به عنوان سرور و هم به عنوان کلاینت کار میکنه (یعنی باید کار کنه)
کار نمیکنه!
با یک نگاه اجمالی و سریع حداقل 5 ایراد پیدا کردم.
اصولاً سعی کنید یک کم تمیز و مرتب و دقیق تر کدنویسی کنید.
کدنویسی اصولی و تمیز خوانایی را افزایش میدهد و دیباگ را هم ساده میکند وگرنه یکم کدتان زیاد شوید، طوری میشود که خودتان با دیدن کد سردرد خواهید گرفت.
سعی کنید نام متغییر های محلی را هم نام متغییر های سطح کلاس قرار دهیدف این کار مستعد خطای منطقی است و یا حداقل در دسترسی اعضای کلاس از کلمه this استفاده کنید تا تفکیک مناسب و قابل فهم سریعی داشته باشید.

1)
سوکت سرور را بجای IPAddress.Any روی همان IP که برای کلاینت هم تنظیم کردید، تنظیم کنید. (127.0.0.1)

2)
در متد OnReceive_s متغییر محلی با نام clientSocket تعریف شده در حالیکه در این نقطه باید متغیر سطح کلاس clientSocket پر میشده.
با این عمل متغیر سطح کلاس clientSocket همچنان null و غیر معتبر باقی میماند.

3)
متد OnSend_s با متغییر clientSocket در سطح کلاس فراخوانی میشود ولی داخل این متد از serverSocket استفاده کرده اید.

4)
در متد OnReceive_s به جای ارسال اطلاعات باید مجدد BeginReceive را فراخوانی میکردید، تا بلوک بعدی اطلاعات هم دریافت شود.
اینطوری فقط اولین پیام دریافت میشود.

5)
در متد OnReceive_s
خیلی راحت از یک TextBox روی فرم استفاده کردید!
در حالیکه این متد در ریسمان دیگری اجرا میشود و TextBox با ریسمان اصلی برنامه ساخته شده.
این کار مستعد خطای ریسمان های متقاطع است.
برای دسترسی به اجرای روی فرم باید از متدهای Invoke و BeginInvoke استفاده کنید.

=====

6)
سوکت های متصل شده شما، به طرز صحیح و مناسب بسته و حذف نمیشوند و فقط تمرکز کدها روی ارتباط بوده، دیگر قطع ارتباط ... !

پیشنهاد میکنم به سمپل ارائه شده دقت بیشتری کنید.
موفق باشید.