Как работать с сокетами в UWP (server/client)

382
26 февраля 2017, 06:59

Как в UWP (universal windows platform) работать с сокетами? Есть документация Microsoft:

https://docs.microsoft.com/ru-ru/windows/uwp/networking/sockets

внедряю в проект код "эхо-сервера TCP" ничего не работает(знаю, что на локальном устройстве не работает т.к для общения приложений существуют другие способы). Пытался подключиться к серверу через работающую программу на Android(делал я, она рабочая) - ничего не происходит. Необходимо по локальной сети отправлять файлы, но без сервера/клиента - невозможно. Есть рабочие варианты кода для консольных программ. С UWP не работал раньше, а работал с WPF. Кто сталкивался с этим прошу помощи. Буду очень благодарен.

   public async void TCPServer() 
    {
        //проблема в данном методе
       try
            {
                //Создать StreamSocketListener, чтобы начать прослушивание для TCP-соединений.
                Windows.Networking.Sockets.StreamSocketListener socketListener = new Windows.Networking.Sockets.StreamSocketListener();
                //Подключить обработчик событий для вызова при получении соединения.
                socketListener.ConnectionReceived += SocketListener_ConnectionReceived;
                //Начать прослушивание для входящих TCP-соединения на указанный порт. Вы можете указать любой порт, что в настоящее время не используется.
                await socketListener.BindServiceNameAsync("1818");
            }
            catch (Exception e)
            {
                //Handle exception.
            }
    }

    private async void SocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender,
Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
    {
                byte[] fileNameByte = Encoding.ASCII.GetBytes(filename);
                byte[] fileData = File.ReadAllBytes(filepath + filename);
                byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
                byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
                fileNameLen.CopyTo(clientData, 0);
                fileNameByte.CopyTo(clientData, 4);
                fileData.CopyTo(clientData, 4 + fileNameByte.Length);
        Stream outStream1 = args.Socket.OutputStream.AsStreamForWrite();
        StreamWriter writer1 = new StreamWriter(outStream1);
         await writer1.WriteLineAsync(Convert.ToChar(fileData));
        await writer1.FlushAsync();
    }
READ ALSO
Перебрать несколько коллекций в одном foreach [требует правки]

Перебрать несколько коллекций в одном foreach [требует правки]

Не очень понятно, что ты хочешь перебирать и как, но вообще в C# есть такая вещь как LINQ, советую почитатьБудет что-то в духе:

271
Вызов асинхронных методов внутри цикла

Вызов асинхронных методов внутри цикла

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

302
Как правильно освободить Image [дубликат]

Как правильно освободить Image [дубликат]

На данный вопрос уже ответили:

267
FormatException при заполнении DataGridView - C#

FormatException при заполнении DataGridView - C#

Прошу помочь с DataGridVievМне нужно, чтобы была таблица в 2 столбца с ранее указанным количеством строк (gg)

471