در این برنامه با استفاده از Socket و پروتکل UDP دو برنامه جهت ارسال و دریافت پیام بصورت دوطرفه ایجاد میکنیم. لطفا به ادامه مطلب توجه نمایید.
در صورتیکه نیاز به توضیح کلاسهای مرتبط به برنامه نویسی تحت شبکه دارید پیشنهاد میکنم این قسمت را مطالعه کنید.
پروژه ای با نام ChatSocket1 از نوع ویندوزی ایجاد کنید و فرم آن را بشکل زیر طراحی نمایید.
سپس فضای نامهای زیر را به برنامه اضافه نمایید.
using System.Net;
using System.Net.Sockets;
using System.Threading;
ما در این برنامه جهت ارسال و دریافت پیام از پروتکل UDP استفاده میکنیم بنابراین با استفاده از کلاس Socket و پروتکل UDP بستر برنامه کاربردی را جهت ارتباط دوطرفه با سیستمهای دیگر را پیاده سازی میکنیم.
Socket so1;
public Form1()
{
so1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
InitializeComponent();
}
نکته : ما در این آموزش از یک سیستم جهت ارتباط دوطرفه استفاده میکنیم لذا در اینصورت شماره پورتهای دو برنامه باید متفاوت باشند.
همانطور که میبینید در این برنامه از شماره پورت 5050 جهت دریافت اطلاعات استفاده مینماید اما در برنامه ی دومی که ایجاد میکنیم از پورت 5051 استفاده میکنیم.
ادامه کار :
جهت ارسال پیام کدهای زیر را در رویداد کلیک دکمه مورد نظر درج میکنیم.
byte[] buffer = new byte[2048];
buffer = Encoding.Unicode.GetBytes(txtMessage.Text);
so1.SendTo(buffer, new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse("5051")));
همانطور که میبینید پیام به سیستمی که دارای آی پی درج شده در txtIP میباشد و به پورت شماره 5051 گوش میدهد ارسال شده است.
اکنون به پیاده سازی دریافت پیامهای ارسال شده توسط سیستمهای دیگیر به این برنامه می پردازیم . لذا تابع زیر را جهت منتظر ماندن و دریافت پیامهای ارسال شده از طرف کاربران شبکه مینویسیم.
public void StartServer()
{
while (true)
{
byte[] buffer = new byte[2048];
int r = so1.Receive(buffer);
if (r > 0)
{
this.Invoke((MethodInvoker)delegate
{
lstMessage.Items.Add(Encoding.Unicode.GetString(buffer, 0, r));
});
}
}
}
سپس کد زیر را جهت اتصال و آماده سازی برنامه برای تبادل پیام در شبکه می نویسیم
so1.Bind(new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text)));
Thread Tr = new Thread(new ThreadStart(StartServer));
Tr.Start();
با توجه به قطعه کدهای بالا بر نامه ما با آی پی 127.0.0.1 به پورت 5050 وصل میشود.
اکنون کار ما برای بخش اول به پایان رسیده است.
برای ایجاد برنامه دوم شما میتوانید از کدهای نوشته شده در برنامه ChatSocket1 استفاده کنید فقط به این نکته توجه داشته باشید که برنامه دوم جهت اتصال به شبکه در صورتیکه آی پی دو برنامه مشابه هم باشند نباید دارای شماره پورتهای یکسان نباشند.
شما میتوانید سورسهای برنامه را از قسمت فایلهای ضمیمه شده دریافت نمایید.
شکل خروجی برنامه.