ايران ويج

نسخه‌ی کامل: ساخت برنامه کلاینت سروری
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام.
برای نوشتن برنامه کلاینت سروری باید چه کامپوننتی رو اضافه کنم؟
تو ویبی وینساک بود ولی تو 2005 C# پیداش نکردم.
کلا روش نوشتن برنامه کلاینت سروری رو تو C# اگه میشه توضیح بدید. اینکه چه تابع هایی باید بنویسم یا از چه ایونت هایی استفاده کنم.
سرچ کردم به این نتیجه رسیدم که از System.Net.Sockets استفاده کنم. ولی توضیح در مورد روش کار میخوام.
ممنون میشم کمکم کنید.
مقالات دنبال کن به اونم میرسیم .
فعلا .net remoting تو ذهنت باشه تا یه مقاله جامع دربارش بنویسم .
اگه میتونی بیا بشو کاربر فعال بخش c#
سلام.
آخه من عجله دارم.
چشم سعی میکنم بیشتر در این بخش فعالیت کنم.
اول اینکه زبان #C با زبان وی بی 6 خیلی متفاوته !
توی این زبان همه چیز توی کلاس تعریف میشه و خوب اون کلاس های مربوطه هم کلاس های دات نت هستند . اینجا برای معمولا مفاهیم شی گرایی پیش میاد که باید باهاش آشنا باشی و گرنه برنامه نویسی توی محیط شی گرا برات نامفهوم میشه . دوم اینکه دات نت کلاس های شبکه با سطوح مختلفی رو ارائه میکنه . بستگی داره شما در چه سطحی از شبکه میخوای کار کنی . برای کار معمولی و چیزی شبیه به همون سوکت های وی بی مثال زیر خوبه :

http://www.ondotnet.com/pub/a/dotnet/200...ockets.htm

البته remoting برای کارهای پیچیده مثل RPC هست . اگر کار ساده ای دارین بهتره از همون کلاس های سوکت استفاده کنی .
سلام ممد جان. چطوری؟
درسته میدونم ویبی خیلی با C# فرق داره. کتابشو خوندم. چند تام pdf دانلود کردم نصفه نیمه خوندم. ولی هنوز به طور حرفه ای با C# کار نکردم.
یه سورس در این زمینه گرفتم که خوب کار میکنه. ولی با کنسول کار میکرد که به فرم تبدیلش کردم. منتها یه مشکلی وجود داره. من نتونستم یه تابع بنویسم که هر زمانی داده از طرف مقابل ارسال شد اینو ور برنامه به طور اتوماتیک داده رو دریافت کنه. مجبور بودم بعد از کانکت شدن بنویسم client.recive که این باعث قفل شدن فرم میشه. آیا تابعی وجود داره برای این کار که هر وقت داده ای از طرف مقابل ارسال شد خود به خود صدا زده بشه؟
بهتره از کلاس TcpListener استفاده کنی برای دریافت اطلاعات . اینهم نمونه کد :
کد:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

class MyTcpListener
{
  public static void Main()
  {
    TcpListener server=null;  
    try
    {
      // Set the TcpListener on port 13000.
      Int32 port = 13000;
      IPAddress localAddr = IPAddress.Parse("127.0.0.1");
      
      // TcpListener server = new TcpListener(port);
      server = new TcpListener(localAddr, port);

      // Start listening for client requests.
      server.Start();
        
      // Buffer for reading data
      Byte[] bytes = new Byte[256];
      String data = null;

      // Enter the listening loop.
      while(true)
      {
        Console.Write("Waiting for a connection... ");
        
        // Perform a blocking call to accept requests.
        // You could also user server.AcceptSocket() here.
        TcpClient client = server.AcceptTcpClient();            
        Console.WriteLine("Connected!");

        data = null;

        // Get a stream object for reading and writing
        NetworkStream stream = client.GetStream();

        int i;

        // Loop to receive all the data sent by the client.
        while((i = stream.Read(bytes, 0, bytes.Length))!=0)
        {  
          // Translate data bytes to a ASCII string.
          data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
          Console.WriteLine("Received: {0}", data);
      
          // Process the data sent by the client.
          data = data.ToUpper();

          byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

          // Send back a response.
          stream.Write(msg, 0, msg.Length);
          Console.WriteLine("Sent: {0}", data);            
        }
        
        // Shutdown and end connection
        client.Close();
      }
    }
    catch(SocketException e)
    {
      Console.WriteLine("SocketException: {0}", e);
    }
    finally
    {
       // Stop listening for new clients.
       server.Stop();
    }

      
    Console.WriteLine("\nHit enter to continue...");
    Console.Read();
  }
سلام.
ممد اینم همون طوریه که. اینم باعث قفل شدن فرم میشه. چون حلقه تموم نمیشه.
خب علتش اینه که نحوه کار با این کلاس از مدل synchronous هست . synchronous یعنی برنامه تا زمانی که دیتایی دریافت نکنه منتظر میمونه .
حالت دیگه دسترسی Asynchronous هست . لینک زیر برنامه سرور با روش Asynchronous رو نشون میده :

http://www.csharphelp.com/archives3/archive486.html
thread ها رو هم باهاش قاطی کنی خوشگل تر هم میشه .
سلام.
میشه از وینساک هم استفاده کرد. سرچ کردم و سورسی پیدا کردم که با وینساک کار کرده بود. به کار کردن با وینساک مسلطم. ولی خوب برنامم به یه فایل خارجی وابسته میشه. شما توصیه میکنید از وینساک استفاده کنم یا نه؟ خودم تمایل دارم با کلاس های خود C# کار کنم.
سلام.
ممد اون برنامه که گذاشتی error میده.
این using ها رو اضافه کردم. بعضی از ارور هاش رفع شد ولی بازم ارور میده.
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Threading;
صفحه‌ها: 1 2