Поиск…


Синтаксис

  • TcpClient (string host, int port);

замечания

Вы можете получить NetworkStream из TcpClient с client.GetStream() и передать его в StreamReader/StreamWriter чтобы получить доступ к их методам чтения и записи async.

Основной клиент TCP-связи

В этом примере кода создается клиент TCP, он отправляет «Hello World» через соединение сокета, а затем записывает ответ сервера на консоль перед закрытием соединения.

// Declare Variables
string host = "stackoverflow.com";
int port = 9999;
int timeout = 5000;

// Create TCP client and connect
using (var _client = new TcpClient(host, port))
using (var _netStream = _client.GetStream()) 
{
    _netStream.ReadTimeout = timeout;

    // Write a message over the socket
    string message = "Hello World!";
    byte[] dataToSend = System.Text.Encoding.ASCII.GetBytes(message);
    _netStream.Write(dataToSend, 0, dataToSend.Length);
    
    // Read server response
    byte[] recvData = new byte[256];
    int bytes = _netStream.Read(recvData, 0, recvData.Length);
    message = System.Text.Encoding.ASCII.GetString(recvData, 0, bytes);
    Console.WriteLine(string.Format("Server: {0}", message));                
};// The client and stream will close as control exits the using block (Equivilent but safer than calling Close();

Загрузите файл с веб-сервера

Загрузка файла из Интернета - очень обычная задача, требуемая почти для каждого приложения, которое вы можете построить.

Для этого вы можете использовать класс « System.Net.WebClient ».

Простейшее использование этого, используя шаблон «using», показано ниже:

using (var webClient = new WebClient())
{
    webClient.DownloadFile("http://www.server.com/file.txt", "C:\\file.txt");
}

В этом примере он использует «использование», чтобы убедиться, что ваш веб-клиент правильно очищен по окончании и просто передает именованный ресурс из URL-адреса в первом параметре, в именованный файл на локальном жестком диске во втором параметр.

Первый параметр имеет тип « System.Uri », второй параметр имеет тип « System.String »,

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

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

var webClient = new WebClient())
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync("http://www.server.com/file.txt", "C:\\file.txt");

Один важный момент, который следует помнить, если вы используете версии Async, и это «Будьте очень осторожны в использовании их в синтаксисе« using ».

Причина этого довольно проста. После вызова метода файла загрузки он немедленно вернется. Если у вас есть это в используемом блоке, вы вернетесь, затем выйдите из этого блока и немедленно удалите объект класса, и, таким образом, отмените загрузку.

Если вы используете способ «использования» для передачи Async, обязательно оставайтесь внутри закрывающего блока до завершения передачи.

Async TCP Client

Использование async/await в приложениях C # упрощает многопоточность. Так вы можете использовать async/await wait в сочетании с TcpClient.

// Declare Variables
string host = "stackoverflow.com";
int port = 9999;
int timeout = 5000;

// Create TCP client and connect
// Then get the netstream and pass it
// To our StreamWriter and StreamReader
using (var client = new TcpClient())
using (var netstream = client.GetStream()) 
using (var writer = new StreamWriter(netstream))
using (var reader = new StreamReader(netstream))
{
    // Asynchronsly attempt to connect to server
    await client.ConnectAsync(host, port);
    
    // AutoFlush the StreamWriter
    // so we don't go over the buffer
    writer.AutoFlush = true;
    
    // Optionally set a timeout
    netstream.ReadTimeout = timeout;

    // Write a message over the TCP Connection
    string message = "Hello World!";
    await writer.WriteLineAsync(message);
    
    // Read server response
    string response = await reader.ReadLineAsync();
    Console.WriteLine(string.Format($"Server: {response}"));                
}
// The client and stream will close as control exits
// the using block (Equivilent but safer than calling Close();

Основной клиент UDP

В этом примере кода создается клиент UDP, а затем отправляется «Hello World» по сети назначаемому получателю. Слушатель не должен быть активным, так как UDP является без установления соединения и будет транслировать сообщение независимо. После отправки сообщения выполняется работа с клиентами.

byte[] data = Encoding.ASCII.GetBytes("Hello World");
string ipAddress = "192.168.1.141";
string sendPort = 55600;
try
{
     using (var client = new UdpClient())
     {
         IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipAddress), sendPort);
         client.Connect(ep);
         client.Send(data, data.Length);
     }
}
catch (Exception ex)
{
     Console.WriteLine(ex.ToString());
}

Ниже приведен пример прослушивателя UDP для дополнения вышеупомянутого клиента. Он будет постоянно сидеть и слушать трафик на данном порту и просто записывать эти данные на консоль. В этом примере содержится флаг управления « done », который не задан внутри, и полагается на что-то, чтобы установить это, чтобы разрешить конец слушателя и выйти.

bool done = false;
int listenPort = 55600;
using(UdpClinet listener = new UdpClient(listenPort))
{
    IPEndPoint listenEndPoint = new IPEndPoint(IPAddress.Any, listenPort);
    while(!done)
    {
        byte[] receivedData = listener.Receive(ref listenPort);

        Console.WriteLine("Received broadcast message from client {0}", listenEndPoint.ToString());

        Console.WriteLine("Decoded data is:");
        Console.WriteLine(Encoding.ASCII.GetString(receivedData)); //should be "Hello World" sent from above client
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow