Программа по передаче файлов с помощью сокетов и TCP/IP. В документации Microsoft нашёл рабочий пример получения сообщения.
Код (подключение к удалённому серверу):
public async void Connect()
{
//подкючиться ip
var dialog = new MessageDialog("Подклчение к устройству. Адрес:" + ip);
await dialog.ShowAsync();
string result = string.Empty;
// Создать DnsEndPoint. Имя хоста и порт передаются в этот метод.
DnsEndPoint hostEntry = new DnsEndPoint(ip, 1818);
// Создать поток на основе TCP-сокет с использованием Интерсети Адрес семьи.
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Создать объект socketasynceventargs в, чтобы использоваться в запросе на подключение
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = hostEntry;
// Обработчик рядный событие для завершения мероприятия.
// Примечание: этот обработчик событий был реализован встроенный для того, чтобы сделать этот метод самодостаточным.
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate (object s, SocketAsyncEventArgs e)
{
// Получить результат этого запроса
result = e.SocketError.ToString();
// Сигнал о том, что запрос выполнен, разблокирование потока пользовательского интерфейса
_clientDone.Set();
});
// Устанавливает состояние события несигнальным, вызывая блокирование потоков
_clientDone.Reset();
// Делаем запрос на асинхронное подключение через сокет
_socket.ConnectAsync(socketEventArg);
// Блокировать поток пользовательского интерфейса для более TIMEOUT_MILLISECONDS миллисекунд.
// Если нет ответа в течение этого времени, то продолжить
_clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
Код (получение сообщения с сервера):
public async void GetFile()
{
// string response = null;
// Мы получаем через установленное соединение
if (_socket != null)
{
// Создать контекст объект socketasynceventargs в
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint;
// Настройка буфера для получения данных
socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE);
// Обработчик рядный событие для завершения мероприятия.
// Примечание: это даже обработчик реализован встроенный для того, чтобы сделать
// этот метод самодостаточным.
socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate (object s, SocketAsyncEventArgs e)
{
if (e.SocketError == System.Net.Sockets.SocketError.Success)
{
// Получаем данные из буфера
response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred);
response = response.Trim('\0');
// преобразовать файл из полученных byte
}
else
{
response = e.SocketError.ToString();
}
_clientDone.Set();
});
// Устанавливает состояние события несигнальным, вызывая блокирование потоков
_clientDone.Reset();
// Асинхронном получает запрос через сокет
_socket.ReceiveAsync(socketEventArgFile);
// Блокировать поток пользовательского интерфейса для более TIMEOUT_MILLISECONDS миллисекунд.
// Если нет ответа в течение этого времени, то продолжить
_clientDone.WaitOne(TIMEOUT_MILLISECONDS);
}
else
{
response = "Socket is not initialized,";
}
var dialog = new MessageDialog("Сообщение :" + response);
await dialog.ShowAsync();
}
Технология получения файла такая же как и получения сообщения. Проблема в том, что с UWP никогда не работал. Есть работающий вариант консольного приложения. За любой ответ буду благодарен.
Есть консольный скрипт (1), который при запуске пишет в базу свой PID полученный функцией getmypid()
Можно ли IIS настроить так, чтобы, например, один и тот же запрос кешировался минут на 10 и пользователю возвращался сохраненный HTML вместо нового...