الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تطوير هذا البرنامج

بدأه wardano في 4 ديسمبر 2011 · 2 رد · 665 مشاهدة · في منتدى الشبكات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تم انشاء برنامج بلغة السي شارب والبرنامج عبارة عم قسمين واحد زبون و سيرفر

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient tcp_client = new TcpClient("127.0.0.1", 8001);

        string str =Console.ReadLine();

            ASCIIEncoding asen =new ASCIIEncoding();
            byte[] ba =asen.GetBytes(str);


            NetworkStream myns =tcp_client.GetStream();


                BinaryWriter mysw=new BinaryWriter(myns);
            mysw.Write(ba);
            mysw.Close();
            myns.Close();
            tcp_client.Close();Console.ReadLine();

        }
    }
}

هاد الزبون

وهاد السيرفر

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
namespace servere
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("servere startr>>>>>>>>>>");
            byte[] b = new byte[100];
            System.Net.IPAddress ip = System.Net.IPAddress.Parse("127.0.0.1");
            TcpListener tcp1 = new TcpListener(ip, 8001);
            tcp1.Start();
            int j = 0;
            while (j < 10)
            {
                Socket s = tcp1.AcceptSocket();
                int k = s.Receive(b);
                for (int i = 0; i < k; i++)
                    Console.Write(Convert.ToChar(b));
                s.Close();
                j = j + 1;
            }

        }
    }
}

اريد ان ارسل ملف بدل من كلام ارجو الطريقة وشكرا يعني عندما تشغيل الملفين يوقم الزبون بإرسال كلام فيظهر عند السيرفر ارريد ان ارسل ملف و ليتم استقباله من قبل السيرفر

#2

السلام عليكم ...

  1. يفضل تحديد نوع الــ Socket كــ SocketType.Stream من ناحية الــ client حتى لا تحصل مشاكل ..
  2. المثال يقوم يقراءة الملف و يضعه في مصفوفة من البايتات array of byte و يضيف إليها أول اربع بايتات اضافية لاسم الملف حتى يعرف السيرفر ما اسم الملف الذي سيضع فيه البيانات المستقبلة , لذلك لا تستغرب لو رأيت الرقم 4 داخل الكود .
  3. المثال تعليمي , يقوم بنقل ملف واحد ثم يجب إعادة تشغيل السيرفر , يمكنك تطويره باستخدام while true داخل الــ thread .
  4. كود الــ Server هو :
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    namespace beginSocketServer
    {
    	//FILE TRANSFER USING C#.NET SOCKET - SERVER
    	class Program
    	{
        	static void Main(string[] args)
        	{
            	try
            	{
                	Console.WriteLine("That program can transfer small file. I've test up to 850kb file\n");
                	IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 5656);
                	Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                	sock.Bind(ipEnd);
    
                	string receivedPath = "e:/";
                	Console.Write("Enter the path where you want to receive the file :");
                	receivedPath = Console.ReadLine() + "\\";
                	Console.WriteLine("Server is running...");
    
    
                	sock.Listen(100);
                	Socket clientSock = sock.Accept();
    
                	byte[] clientData = new byte[1024 * 5000];
    
    
                	int receivedBytesLen = clientSock.Receive(clientData);
    
                	int fileNameLen = BitConverter.ToInt32(clientData, 0);
                	string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);
    
                	Console.WriteLine("Client:{0} connected & File {1} started received.", clientSock.RemoteEndPoint, fileName);
    
                	BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + fileName, FileMode.Append)); ;
                	bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
    
                	Console.WriteLine("File: {0} received & saved at path: {1}\n", fileName, receivedPath);
                	Console.WriteLine("Now restart server to send another file");
                	bWrite.Close();
                	clientSock.Close();
                	Console.ReadLine();
            	}
            	catch (Exception ex)
            	{
                	Console.WriteLine("File Receiving fail." + ex.Message);
            	}
        	}
    	}
    }

  5. كود الــ Client هو :
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    namespace Client_Socket
    {
    	//FILE TRANSFER USING C#.NET SOCKET - CLIENT
    	class Program
    	{
        	static void Main(string[] args)
        	{
            	try
            	{
                	Console.WriteLine("That program can transfer small file. I've test up to 850kb file\n\n");
                	IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
                	IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
                	Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
    
    
                	string fileName ,filePath ;
                	Console.Write("Your File Name: ");
                	fileName=Console.ReadLine();
    
                	Console.Write("Your File Path: ");
                	filePath = Console.ReadLine();
    
                	byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
    
                	byte[] fileData = File.ReadAllBytes(filePath + "\\"+fileName);
                	byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
                	byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
    
                	fileNameLen.CopyTo(clientData, 0);
                	fileNameByte.CopyTo(clientData, 4);
                	fileData.CopyTo(clientData, 4 + fileNameByte.Length);
    
                	clientSock.Connect(ipEnd);
                	clientSock.Send(clientData);
                	Console.WriteLine("File:{0} has been sent.", fileName);
                	clientSock.Close();
                	Console.ReadLine();
            	}
            	catch (Exception ex)
            	{
                	Console.WriteLine("File Sending fail." + ex.Message);
                	Console.ReadLine();
            	}
    
        	}
    	}
    }

  6. رابط المثال الأصلي هو : رابط و الكود موجود في المثال و في الرابط:
  7. المثال السابق يعمل من أجل small files أي ملفات صغيرة يمكن وضعها في الذاكرة دفعة واحدة .
  8. لو اردت مثال عن الـ large file فهذا رابط مع العلم أن بعض التعليقات تقول أنه لا يعمل أو يعمل و لكن يتغير حجم الملف المنقول (نصيحة لا تضيع وقتك فيه).

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

الله يعطيك العافية وبارك الله فيك

مواضيع مشابهة