2016-07-12 2 views
0

Я пытаюсь создать клиентское приложение UWP и сервер. Оба клиента и сервер размещаются на разных машинах.Отправка данных с сервера на клиент в UWP

Network connection with UWP Apps

Используя эту ссылку, я смог подключиться к серверу и может послать строку от клиента к серверу. Эта штука абсолютно прекрасна.

Но теперь вопрос заключается в том, как отправить данные с сервера на клиент. Я не мог найти подходящего образца. Может кто-то проливает свет на отправку данных с сервера на клиент.

Любые фрагменты кода или ссылки очень ценятся.

+0

Ваш клиент всегда подключен к серверу? – Suneesh

+0

No. on Click Я подключаюсь к серверу. Я раскрываю доказательства концепции (POC) и нуждаюсь в расширении этого ПОС. Мое требование - клиент и сервер, размещенные на разных компьютерах. Когда сервер получает данные от клиента, ему немедленно нужно отправить ответ клиенту. – user3012974

+1

Это просто, используйте асинхронный сокет для подключения к серверу, затем отправьте данные, не отсоединяйте, подождите, чтобы прочитать данные из одного и того же сокета. Пример https://msdn.microsoft.com/en-us/library/windows/apps/hh202858%28v=vs.105%29.aspx – Suneesh

ответ

0

Из кода, который вы упомянули, измените метод ConnectSocket() для чтения ответа с сервера.

Я не запускаю код. могут потребоваться изменения

private async Task ConnectSocket() 
    { 
     StreamSocket socket = new StreamSocket(); 

     socket.Control.KeepAlive = false; 

     HostName host = new HostName("localhost"); 

     try 
     { 
      await socket.ConnectAsync(host, "5463"); 

      Stream streamOut = socket.OutputStream.AsStreamForWrite(); 
      StreamWriter writer = new StreamWriter(streamOut); 
      string request = "Test Self App \n"; 
      await writer.WriteLineAsync(request); 
      await writer.FlushAsync(); 
      // Code for reading 
      Stream streamIn = socket.OutputStream.AsStreamForRead(); 
      StreamReader reader = new StreamReader(streamIn); 
      char[] result = new char[reader.BaseStream.Length]; 
      await reader.ReadAsync(result, 0, (int)reader.BaseStream.Length); 
      // Your data will be in results 
      socket.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      txb_Events.Text += ex.Message; 
      //Logs.Add(ex.Message) 
     } 


    } 
+0

Я сделал это сам. Спасибо за поддержку. – user3012974

0

Но теперь вопрос заключается в том, чтобы передавать данные от сервера к клиенту.

Поскольку вы используете StreamSocket, чтобы установить соединение между клиентом и сервером, есть официальный Socket activity trigger stream socket sample которые включают в себя как приложение клиента и сервера приложений и прекрасно показывает, как использовать сокет Activity Stream сокетов API, чтобы сокет живым вне срока службы приложения.

Для отправки данных от сервера к клиентской части, в проекте StreamSocketListenerServer (сервер):

private async void SendButton_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     DataWriter writer = new DataWriter(connectedSocket.OutputStream); 
     writer.WriteBytes(Encoding.UTF8.GetBytes(SendMessageTextBox.Text)); 
     SendMessageTextBox.Text = ""; 
     await writer.StoreAsync(); 
     writer.DetachStream(); 
     writer.Dispose(); 
    } 
    catch(Exception exception) 
    { 
     rootPage.NotifyUser(exception.Message, NotifyType.ErrorMessage); 
    } 
} 
Смежные вопросы