برنامه نویسی Server/Client اتصال گرا (TCP) با کمک سوکت در سی شارپ
جمعه, ۱۹ خرداد ۱۳۹۶، ۰۶:۵۴ ب.ظ
برای ایجاد برنامه های سرویس دهنده/سرویس گیرنده بصورت اتصال گرا در سی شارپ ، دو پروژه از نوع کنسول ایجاد می کنیم. یکی از روش های ارتباط و ارسال پیام بین برنامه های سرویس گیرنده وسرویس دهنده استفاده از سوکت می باشد.در نمونه برنامه های زیر برای ساخت برنامه سرویس دهنده از TcpListener و متد AcceptSocket آن استفاده شده است.
این متد یک شی سوکت بر می گرداند که با فراخوانی متدهای Send و Receive آن می توان پیام ها را ارسال و دریافت کرد.
در برنامه سرویس گیرنده هم یک سوکت ایجاد شده و با اتصال به سرویس دهنده با آن پیام رد و بدل می کند . کلاس Socket در سی شارپ متدهای زیر را داراست:
- متد Connect : اتصال به سرویس دهنده
- متد Send : ارسال پیام
- متد Receive: دریافت پیام
- متد Close : بستن ارتباط
لازم به ذکر است هر نوع پیامی برای ارسال در شبکه باید در مبدا از حالت رشته ای به آرایه ای از بایت ها تبدیل شده و در مقصد دوباره به رشته تبدیل گردد.
برنامه سرویس دهنده :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;using System.Net;
using System.Net.Sockets;namespace Server1
{
class Program
{
static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse(“192.168.11.30”);
int port = 2500;
TcpListener s = new TcpListener(ip, port);
s.Start();
Console.WriteLine(“Server Started.. “);
Socket c = s.AcceptSocket();
Console.WriteLine(“1 Client connected.. “);
byte[] b1 = new byte[80];
b1 = ASCIIEncoding.ASCII.GetBytes(“Hello ,please send message:”);
c.Send(b1);
byte[] b2 = new byte[80];
c.Receive(b2);
Console.WriteLine( ASCIIEncoding.ASCII.GetString(b2) );
c.Close();
Console.ReadKey();
}
}
}
برنامه سرویس گیرنده :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;using System.Net;
using System.Net.Sockets;namespace Client
{
class Program
{
static void Main(string[] args)
{
// ایجاد ارتباط
// TCP
// با استفاده از سوکت
string msg;
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream
, ProtocolType.Tcp);
c.Connect(“192.168.11.30”, 2500);
byte[] b1 = new byte[80];
c.Receive(b1);
Console.Write( ASCIIEncoding.ASCII.GetString(b1) );
msg = Console.ReadLine();
byte[] b2 = new byte[80];
b2 = ASCIIEncoding.ASCII.GetBytes(msg);
c.Send(b2);
c.Close();
}
}
}
- ۹۶/۰۳/۱۹