Конференция ".Net" » Сокеты [C#, WinXP]
 
  • OlegEl (15.12.05 22:11) [0]
    Здравствуйте, уважаемые мастера.
    Есть код приложения, использующего сокеты.

    using System;
    using System.Net.Sockets;
    using System.Net;
    using System.Text;

    namespace Server
    {
    class Server
    {
     private static void OnBeginAccept(IAsyncResult ar)
     {
      try
      {
       Socket listener =(Socket)ar.AsyncState;
       using(Socket client=listener.EndAccept(ar))
       {
        byte[] buffer=new byte[100];
        client.Receive(buffer);
        buffer=Encoding.UTF8.GetBytes(string.Format("Hello,{0}
    ", Encoding.UTF8.GetString(buffer)));
        client.Send(buffer);
       }
      }
      catch (Exception ex)
      {
       Console.WriteLine("ОШИБКА!!! "+ex.Message);
      }

     }
     
     
     [STAThread]
     static void Main(string[] args)
     {
      try
      {
       
       EndPoint endPoint=new IPEndPoint(IPAddress.Loopback,8000);
       using (Socket listener=new Socket(endPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp))
       using (Socket client=new Socket(endPoint.AddressFamily,SocketType.Stream,ProtocolType.Tcp))
       {
         listener.Bind(endPoint);
         listener.Listen(1);
         listener.BeginAccept(new AsyncCallback(OnBeginAccept),listener);

         Console.WriteLine("Enter command");
         string request=Console.ReadLine();
         client.Connect(endPoint);
         int count=client.Send(Encoding.UTF8.GetBytes(request));
         byte[] buffer=new byte[100];
         client.Receive(buffer);
         string responce=Encoding.UTF8.GetString(buffer);
         int index=responce.IndexOf('\0');
         Console.WriteLine(string.Format("Answer: {0}
    ",responce.Remove(index,1)));

       }
       Console.WriteLine("Сервер запущен!!!");
       Console.ReadLine();

       
      }
      catch(Exception ex)
      {
       Console.WriteLine("ERROR!!! "+ex.Message);
      }

     }
    }
    }


    В приложении объединены клиентская и серверная части. Приложение работает. А может кто подскажет, как разделить это приложение на отдельные клиентскую и серверную части.
    Заранее благодарен.
  • Курдль © (16.12.05 10:57) [1]

    > А может кто подскажет, как разделить это приложение на отдельные
    > клиентскую и серверную части.
    > Заранее благодарен.


    Почитать MSDN про сокеты.
    Цель-то какая?

    В общем случае (если быть уверенным, что интересует протокол TCP, как в примере), то на сервере организуется сокет в режиме прослушивания. Как только он получает запрос от сокета клиента на подключение - генерирует новый сокет для обмена данными с клиентом.
  • Курдль © (16.12.05 11:03) [2]
    О! Вспомнил! У меня есть самодельная прога-игрушка, в которой использованы все прелести сокетов, если надо что-то похожее, так и быть, разложу по полочкам :)

    http://www.kurdl.h15.ru/pages/land/lanlend.htm
 
Конференция ".Net" » Сокеты [C#, WinXP]
Есть новые Нет новых   [134430   +2][b:0][p:0.002]