بسم الله الرحمن الرحيم.
هذا كود بسيط كتبته على الConsole الخاص ب C# Express 2005 beta 2 لإرسال و إستقبال ملفات صغيرة من على الNetwork باستخدام الSockets
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(ReceiverFn));
Thread t2 = new Thread(new ThreadStart(SenderFn));
t1.Start();
t2.Start();
}
public static void SenderFn()
{
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect("localhost", 1999);
//sender.SendFile("C:\\1.txt");
StreamReader reader = File.OpenText("C:\\1.txt");
sender.Send(Encoding.Default.GetBytes(reader.ReadToEnd()));
reader.Close()
sender.Close();
}
public static void ReceiverFn()
{
Socket recv = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ip = new IPEndPoint(IPAddress.Any, 1999);
recv.Bind(ip);
recv.Listen(10);
Socket sender = recv.Accept();
byte[] buffer = new byte[1024];
int bytes = sender.Receive(buffer);
StreamWriter writer = File.CreateText("C:\\2.txt");
writer.Write(Encoding.Default.GetString(buffer, 0, bytes));
writer.Flush();
writer.Close();
}
}
}و فيم يلي شرح للكود
أولا الكود يعمل على كل من net 1.1 و .net 2.0 ماعدا السطر الخاص بالsender.SendFile فهي خاصة ي.net 2.0 و قد قمت بعمل comment له و استبداله بالسطر الذي يليه.
الشرح
يُستخدم في هذا الكود أسلوبان و هما
1- الThreading
2- الSocket Programming
بالنسبة لThreading فتم استخدامه لعمل الSender و الReceiver في برنامج واحد و لكن في 2 threads منفصلين بدلا من برنامجين مختلفين..
بالنسبة لSocket Programming
استخدام الSocket بدلاً من الTcpClient و الTcpListener يعطي إمكانيات أكبر من حيث التحكم في نوع الProtocol المستخدم و الإرسال المباشر او غير المباشر و كما اتضح مع التجربة أنه أبسط.
الSender
عبارة عن Socket ترسل ملفاً للReciver على port 1999
استُخدمت Socket.Send و هي function تقوم بارسال مجموعة من الbytes على هيئة Array الى الReciever
ال Receiver
عبارة عن Socket أيضا و لكن في وضع الإستقبال
و قد استخدمت الfunction Receive لتلقي الملف على هيئة array of bytes ثم قمنا باعادته الى string مرة اخرى و كتابته في الملف 2.txt
