Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пишу первую прогу клиент-сервер с помощью Remoting, Заходите, помогите, кто чем может. 
:(
    Опции темы
Experimenter
Дата 20.9.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 1
Всего: 17





--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
CityAC
Дата 20.9.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: нет
Всего: 1



Цитата(Experimenter @  20.9.2007,  13:56 Найти цитируемый пост)
 помогу тебе как многодетный отец многодетному отцу.

У меня бабушка родом из Давлеканово.
Был там в 5 лет у прабабки. Так что может мы еще и родственники - мир тесен говорят.

--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
CityAC
Дата 20.9.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: нет
Всего: 1



Ну что едем дальше.

Поток создается, в него загружается XML таблица (таблица с одной строкой), (если можно сериализовать таблицу, то зачем DataSet! - понял  по твоей подсказке)

А как на стороне клиента организовать запрос?

Добавлено через 1 минуту и 49 секунд
Цитата(Experimenter @  20.9.2007,  14:13 Найти цитируемый пост)
почитай на досуге

Покой нам только снится Так что буду читать прям щас.


Это сообщение отредактировал(а) CityAC - 20.9.2007, 15:12
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Experimenter
Дата 20.9.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 1
Всего: 17



Ну если времени нет, то можно вообще без сериализации обойтись, главное, чтоб сервер клиентские запросы распознавал правильно

Клиент, которым я часто пользуюсь для тестирования сетевых приложений:
Код

            Stream s;
            HttpWebRequest webreq;
            HttpWebResponse webresp;
            string response = "";
            string request = "OPERATION WITH DATA";                       

            try
            {
                webreq = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:9999");
                webreq.AuthenticationLevel = AuthenticationLevel.None;
                // если есть прокси:
                // webreq.Proxy = new WebProxy("proxyaddress", 1819);
                // webreq.Proxy.Credentials = new NetworkCredential("Login", "Password");
                webreq.Method = "POST";
                webreq.ContentType = "text/plain"; // в твоем случае "text/xml"
                webreq.KeepAlive = false;
                webreq.Timeout = 100000; // 100000 мс - это дефолт, поэтому можно пропустить

                StreamWriter sw = new StreamWriter(webreq.GetRequestStream(), Encoding.GetEncoding(1251));
                sw.Write(strBuffer);
                // или в твоем случае XmlTextWriter, тогда serializer.Serialize(xmlWriter, dataTable);
                sw.Flush();
                sw.Close();

                Console.WriteLine("Request was sended");
                webresp = (HttpWebResponse)webreq.GetResponse();
                Console.WriteLine(webresp.StatusCode);
                Console.WriteLine(webresp.Headers);
                Console.WriteLine(webresp.CharacterSet.ToString());

                s = webresp.GetResponseStream();
                sr = new StreamReader(s, Encoding.GetEncoding(1251));
                response = sr.ReadToEnd();
                Console.WriteLine("RESPONSE:\r\n" + response);
                sr.Close();
                s.Close();

                FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "\\" + "response.txt", FileMode.OpenOrCreate);
                sw = new StreamWriter(fs, Encoding.GetEncoding(1251));
                sw.Write(webresp.Headers.ToString());
                sw.Write(response.Replace("\n", "\r\n"));
                sw.Flush();
                sw.Close();
            }
            catch (Exception webex)
            {
                response = "ERROR!!! Description: " + webex.Message + "\r\n" + webex.StackTrace;
            }
            finally
            {
                webreq = null;
                webresp = null;
                sw = null;
                sr = null;
                s = null;
            }

Вот вроде бы и все...


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
CityAC
Дата 20.9.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: нет
Всего: 1



Код

Uri ourUri = new Uri("http://127.0.0.1:9999");// если прописываю порт, то ошибка "не могу соединится с удпленным хостом
                                                                         // без порта проходи это место, но правда не знаю еще работает это или нет
            HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(ourUri);
            webreq.Method = "POST";
            webreq.ContentType = "text/xml";
            Stream streamTab = webreq.GetRequestStream();
           
            TextWriter writerTab = new StreamWriter(streamTab);
            serTab.Serialize(writerTab, temp);
    writerTab.Close(); 
  
      

Это сервер - готов отправлять.

Это сообщение отредактировал(а) CityAC - 20.9.2007, 19:03
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Experimenter
Дата 20.9.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 1
Всего: 17



Цитата

если прописываю порт, то ошибка "не могу соединится с удпленным хостом

Ясен перец, не пройдет, надо чтоб сервер слушал тот порт. Это ж пример!!!
Цитата

Это сервер - готов отправлять.

Это клиент! Или я недоврубился?

Добавлено через 10 минут и 21 секунду
На сервере HttpListener поднимают


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
CityAC
Дата 20.9.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: нет
Всего: 1



Называется ПРИЕХАЛИ!
клиента я написал такого как ты мне прислал (тот что ты используешь для тестирования сетевых приложений)
Тогда получается как написать на стороне сервера?
Че то я в край запутался.

На сервере формируется таблица с одной строкой.И эту таблицу нужно отправить на клиента
А если клиент редактирует эту строку, то ее нужно будет отправить назад на сервер
           
Получается что клиент должен слушать сервер и сервер должен слушать клиента.


Это сообщение отредактировал(а) CityAC - 20.9.2007, 19:40
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Experimenter
Дата 20.9.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 1
Всего: 17



Клиент это тот, кто шлет запросы
Сервер - тот, кто их обрабатывает и отсылает ответы
На Сервере обычно ставят асинхронный слухач. Эх...
Есть тоже пример, но он сырой, додумай сам
Код

public class MyServer
    {
        static void Main()
        {
            MyServer myserv = new MyServer("http://127.0.0.1:9999/");
        }

        public MyServer(string prefix)
        {
            if (HttpListener.IsSupported)
            {
                HttpListener listener = new HttpListener();
                listener.Prefixes.Add(prefix);
                listener.Start();
                Console.WriteLine("Listening...");
                while (true)
                {
                    IAsyncResult iar = listener.BeginGetContext(new AsyncCallback(Start), listener);
                    iar.AsyncWaitHandle.WaitOne();
                }
            }
            else Console.WriteLine("HttpListener is not supported by this System");
        }

        static void Start(IAsyncResult iar)
        {
            HttpListener listener = iar.AsyncState as HttpListener;
            HttpListenerContext hlc = listener.EndGetContext(iar);
            HttpListenerRequest hlReq = hlc.Request;
            ...
        }
    }

В данном случае HttpListenerRequest - это данные, пришедшие от клиента, у него тоже есть стрим (свойство InputStream).
В ответ нужно клиенту отправить OutputStream класса:
Код

HttpListenerResponse hlResp = hlc.Response;

В данном случае это два простейших приложения (с Клиентом), их еще нужно шлифовать и шлифовать под себя.
Доходчиво?


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Experimenter
Дата 20.9.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 1
Всего: 17



Три добавления:
1. Чтобы упростить задачу нужно к HttpWebRequest прилепить свойство ContentLength, в котором указываешь длину сообщения, на Сервере тогда можно задать массив байтов с этой длиной, чтоб слить данные из InputStream'а. Мне думается, так проще
2. Опять же, чтоб упростить задачу, вместо того, чтоб сериализовать таблицу с одной строкой, не проще ли эти данные слить в стринг с разделителями, например "data1@data2@data3"? Хотя это дело вкуса.
3. Не знаю, что приходит от клиента, но если мало данных (ок. 200 байт), тогда можно GET-запросы отправлять, еще проще...


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
CityAC
Дата 21.9.2007, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: нет
Всего: 1



Качнул книгу .NET сетевое программирование для профессионалов.
Почитал про работу сокетов и  асинхронное программирование. Все стало на свои места.
Надо было с этого начать, чтоб не пугать людей своими вопросами.
Завтра, вернее сегодня приду на работу, буду этот ворох, что нагородил в проге разгребать. Специально дома на инете сидел, чтоб вникнуть в суть(на работе ремонт офиса, интернета нет).
Спасибо тебе Экспериментатор, как говорится направил, вывел в люди  smile 
ну, пора и спать.
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
artechve
Дата 26.9.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.9.2007

Репутация: нет
Всего: нет



Коллеи! подкиньте пож-та ссылок и примеров трехуровневых приложений. 
и где можно почитать обзор  как правильно делать 3L посредством .NET 

я хочу сделать 3L - приложение на .NET , но при этом не испольховать WEBServices, а только MTS/COM+


Это сообщение отредактировал(а) artechve - 26.9.2007, 15:47
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.