none
Клиент своего чата на WinRT (вопрос реализации) RRS feed

  • Вопрос

  • Делаю в учебных целях чат.

    Сервер написал на .NET 4.0 (по некоторым причинам на 4.5 не могу)

    ну это пока не сервер а так, набросок в виде получателя текстовых сообщений.

    работает через System.Net.Sockets

    для начала клиент написал тоже консольный и тоже на .NET 4.0 , с использованием тех же классов.

    всё соединилось, работает.

    но теперь решил написать клиент в Metro-стиле, т.е. на WinRT.

    но System.Net.Sockets там нету, есть только Windows.Networking.Sockets

    как можно совместить клиент и сервер работая с этими классами?

    пока что не очень понял.

    ---

    второй вопрос, относительно концепции.

    насколько я понял, при сворачивании метро приложения связь будет теряться с сервером, что не очень хорошо для чата.

    как это лучше обойти?созданием службы windows и с последующей работы с ней в метро-приложении?

    25 марта 2012 г. 9:13

Ответы

  • Здравсвтуйте.

    У вас для передачи данных между клиентом и сервером используется TCP протокол? Тогда вам нужно использовать класс StreamSocket, по его использованию есть пример на javascript+html5

    Общая логика работы с данным классом такова:

    1. Создаете объект данного класса

    2. Через свойство Control получаете объект StreamSocketControl с помощью которого вы настраивате сокет нужным образом

    3. Для соединения с сервером используете метод ConnectAsync

    4. С помощью свойст OutputStream и InputStream получаете исходящий и входящий потоки данных, которые используете для отправки/получения данных от сервера.

    5. После того как работа клиента завершена вызываете метод Close для того чтобы прервать все ожидающие операции и освободить неуправляемые ресурсы.


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 30 марта 2012 г. 6:36
    26 марта 2012 г. 6:51

Все ответы

  • Я еще не разбирался с Metro, но как я понимаю он использует .Net 4.5 который является расширением поверх 4.0 (а тот в свою очередь расширением по верх 3.5 и т.д.), а значит вам достаточно подключить к проекту нужное пространство имен (System.Net.Sockets) и код будет работать.

    Это так с проектами WPF - никто же не мешает подключать System.Windows.Forms и пользоваться классами от туда... Я думаю именно поэтому программирование на .Net и имеет такой успех.

    UPD: Насчет второго вопроса. Попробуйте поискать информацию тут и тут


    Влюблен в WPF Не пишу на C#




    26 марта 2012 г. 4:36
    Отвечающий
  • Здравсвтуйте.

    У вас для передачи данных между клиентом и сервером используется TCP протокол? Тогда вам нужно использовать класс StreamSocket, по его использованию есть пример на javascript+html5

    Общая логика работы с данным классом такова:

    1. Создаете объект данного класса

    2. Через свойство Control получаете объект StreamSocketControl с помощью которого вы настраивате сокет нужным образом

    3. Для соединения с сервером используете метод ConnectAsync

    4. С помощью свойст OutputStream и InputStream получаете исходящий и входящий потоки данных, которые используете для отправки/получения данных от сервера.

    5. После того как работа клиента завершена вызываете метод Close для того чтобы прервать все ожидающие операции и освободить неуправляемые ресурсы.


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 30 марта 2012 г. 6:36
    26 марта 2012 г. 6:51
  • Мне пишет что всё что можно уже подключено

    скриншот

    26 марта 2012 г. 14:44
  • 3. Для соединения с сервером используете метод ConnectAsync



    Вот не понимаю как его использовать?

    ему в качестве параметра надо передать некий Windows.Networking.EndpointPair.

    ну допустим создаю новый объект Windows.Networking.EndpointPair, ему в конструктор надо передать localHostName, localServiceName, remoteHostName, remoteServiceName.

    при чем 1 и 3 аргумент типа Windows.Networking.Hostname.

    в System.Net.Sockets такого вообще не видел..

    там просто пишу:

    TcpClient client = new TcpClient(string hostname,int port)

    byte[] bytes = Encoding.Unicode.GetBytes(string message);

    client.GetStream().Write(byte[] buffer, int offset, int size);

    и всё, отправляет всё нормально (ну я упрощённо написал без потоков и т.д.)

    ---

    получилось соединиться!спасибо)

    • Изменено SUDALV 26 марта 2012 г. 20:45
    26 марта 2012 г. 14:59