-
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