![]() |
Братцы, нужна помощь в C#
необходимо сделать трехзвенный иерархический клиент-сервер: клиент (КПК, отпраляющий запрос) -> промежуточный сервер (только для передачи к конечному серверу)-> конечный сервер (в нем база данных, из которой происходит выборка нужной информации).
C# изучаю недавно... кто может помочь ??)) |
и в чем проблема?
Возможно заинтересует: https://forum.antichat.ru/showthread.php?p=2007760 |
Проблема в том, что не писал под КПК, следовательно не знаю ньюансов, и с промежуточным сервером траблы: с клиентом конектится, с конечным сервером тоже, а вот передачу сообщений от клиента серверу не получается реализовать...
Словом, не очень понятен принцип функционирования промежуточного сервера. Есть идеи, Волшебник ???? |
для КПК если уж выбран .NET я понимаю будет использован .NET Compact Framework.
Честно говоря под КПК тоже ни разу не писал (не было необходимости). Для промежуточного сервера просто написать веб-сервис, получающий данный из БД. либо я все вижу за "розовыми очками", либо не понимаю в чем проблема. P.S. n-tier |
проблема в промежуточном сервере... как его писать...
вот что у меня получилось: using System; ///////////////////////////////////////////////// using System.Collections.Generic;///// Консольный стандарт //// using System.Text;///////////////////////////////////////////// using System.Net.Sockets; // Вот он, родимый коллекшн классов / using System.Threading; // Коллекшн для работы с потоками ///// using System.IO; using System.Net; namespace tcp_between_server { class Program { static void Main(string[] args) { string cmd; // Console.Write("Port to listen: "); // int port = Convert.ToInt32(Console.ReadLine()); Int32 port1 = 4000; Console.WriteLine("Creating server..."); Server Serv = new Server(); // Создаем новый экземпляр класса // сервера Serv.Create(port1); while (true) { cmd = Console.ReadLine(); // Ждем фразы EXIT когда // понадобится выйти из приложения. // интерактивность. if (cmd == "EXIT") { Serv.Close(); // завершение сервера. return; } } } public class Server // класс сервера. { private int LocalPort; private Thread ServThread; // экземпляр потока TcpListener Listener; // листенер)))) public void Create(int port1) { LocalPort = port1; ServThread = new Thread(new ThreadStart(ServStart)); ServThread.Start(); // запустили поток. Стартовая функция – // ServStart, как видно выше } public void Close() // Закрыть серв { Listener.Stop(); ServThread.Abort(); return; } private void ServStart() { Socket ClientSock; // сокет для обмена данными. TcpClient Client = new TcpClient(); string data; byte[] cldata = new byte[1024]; // буфер данных IPAddress sock_addr = IPAddress.Parse("127.0.0.1"); TcpListener Listener = new TcpListener(sock_addr, LocalPort); try { Listener.Start(); // начали слушать } catch (SocketException exc) { Console.WriteLine("Error: " + exc.Message); } Console.WriteLine("Waiting connections [" + Convert.ToString(LocalPort) + "]..."); try { ClientSock = Listener.AcceptSocket(); // пробуем принять // клиента } catch { ServThread.Abort(); // нет – жаль( return; } int i = 0; if (ClientSock.Connected) { while (true) { try { string ip = "127.0.0.1"; Int32 port = 5000; Client.Connect(ip, port); i = ClientSock.Receive(cldata); // попытка чтения // данных } catch { Console.WriteLine("\n\t\t\tCannot connect to remote host!"); Console.WriteLine("\n\n\n\t\t\t Press any key to continue..."); Console.ReadKey(); return; } try { if (i > 0) { data = Encoding.ASCII.GetString(cldata).Trim(); Console.WriteLine("<" + data); if (data == "CLOSE") // если CLOSE – // завершение работы клиента и сервера { ClientSock.Send(Encoding.ASCII.GetBytes("Closing the server...")); ClientSock.Close(); Listener.Stop(); Console.WriteLine("Server closed. Reason: client wish! Type EXIT to quit the application."); ServThread.Abort(); return; } else { // нет – отправляем данные клиенту. Socket Sock = Client.Client; // ClientSock.Send(Encoding.ASCII.GetBytes(data)); Sock.Receive(cldata); Sock.Send(Encoding.ASCII.GetBytes(data)); ClientSock.Send(Encoding.ASCII.GetBytes(data)); cldata = new byte[1024]; } } } catch { ClientSock.Close(); // ну эт если какая хрень.. Listener.Stop(); Console.WriteLine("Server closing. Reason: client offline. Type EXIT to quit the application."); ServThread.Abort(); } } } } } } } проблема в пересылке, но как её устранить пока не могу понять... |
Цитата:
|
пипец, сокеты...
написано в стиле 2000-2005, когда в моде были трои вида NetBus, Lamer Death. Когда вся логика была завязана на пересылке константы. Тут веб-сервис писать надо, хостить его на IIS и все. |
судя по всему трабл здесь:
Sock.Receive(cldata); Sock.Send(Encoding.ASCII.GetBytes(data)); ClientSock.Send(Encoding.ASCII.GetBytes(data)); но как его устранить ???? что не так делаю ???? использую 2 сокета и 2 порта.... может в этом трудности ???? |
http://ru.wikipedia.org/wiki/Веб-сервис
http://www.realcoding.net/article/view/2519 |
=))) спасибо конечно... но веб-сервисы я тоже не писал ((( а прога уже ух как нужна ((( может через сокеты на mySql получится ???
|
| Время: 22:30 |