Zoeken…


Syntaxis

  • TcpClient (stringhost, int-poort);

Opmerkingen

U kunt NetworkStream van een TcpClient met client.GetStream() en aan een StreamReader/StreamWriter om toegang te krijgen tot hun async lees- en schrijfmethoden.

Basic TCP-communicatieclient

Dit codevoorbeeld maakt een TCP-client, verzendt "Hallo wereld" via de socketverbinding en schrijft vervolgens de serverreactie naar de console voordat de verbinding wordt verbroken.

// 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();

Download een bestand van een webserver

Het downloaden van een bestand van internet is een veel voorkomende taak die vereist is door bijna elke toepassing die u waarschijnlijk gaat bouwen.

Om dit te bereiken, kunt u de klasse " System.Net.WebClient " gebruiken.

Het eenvoudigste gebruik hiervan, met behulp van het "gebruik" patroon, wordt hieronder getoond:

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

Wat dit voorbeeld doet, is dat het "gebruiken" gebruikt om ervoor te zorgen dat uw webclient correct wordt opgeruimd wanneer het klaar is, en draagt de genoemde bron eenvoudig over van de URL in de eerste parameter naar het genoemde bestand op uw lokale harde schijf in de tweede parameter.

De eerste parameter is van het type " System.Uri ", de tweede parameter is van het type " System.String "

Je kunt deze functie ook gebruiken als een asynchrone vorm, zodat deze wordt uitgeschakeld en de download op de achtergrond wordt uitgevoerd, terwijl je toepassing met iets anders opschiet, het gebruik van de oproep op deze manier is van groot belang in moderne toepassingen, omdat het helpt om uw gebruikersinterface responsief te houden.

Wanneer u de Async-methoden gebruikt, kunt u gebeurtenishandlers aansluiten waarmee u de voortgang kunt volgen, zodat u bijvoorbeeld een voortgangsbalk kunt bijwerken, iets als het volgende:

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");

Een belangrijk punt om te onthouden is echter dat u de Async-versies gebruikt, en dat is "Wees zeer voorzichtig met het gebruik ervan in een 'gebruikssyntaxis'.

De reden hiervoor is vrij eenvoudig. Nadat u de downloadbestandmethode hebt aangeroepen, wordt deze onmiddellijk teruggestuurd. Als je dit in een gebruikend blok hebt, zul je terugkeren en dat blok verlaten, en onmiddellijk het klasseobject weggooien, en dus je lopende download annuleren.

Als u de 'gebruikende' manier gebruikt om een Async-overdracht uit te voeren, moet u binnen het omsluitende blok blijven totdat de overdracht is voltooid.

Async TCP-client

async/await in C # -toepassingen vereenvoudigt multi-threading. Dit is hoe je async/await kunt gebruiken in combinatie met een 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();

Basic UDP Client

Dit codevoorbeeld maakt een UDP-client en verzendt vervolgens "Hallo wereld" over het netwerk naar de beoogde ontvanger. Een luisteraar hoeft niet actief te zijn, omdat UDP geen verbinding heeft en het bericht toch uitzendt. Zodra het bericht is verzonden, is het werk van de client klaar.

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());
}

Hieronder is een voorbeeld van een UDP-luisteraar als aanvulling op de bovenstaande client. Het zal constant blijven zitten en luisteren naar verkeer op een bepaalde poort en die gegevens eenvoudigweg naar de console schrijven. Dit voorbeeld bevat een besturingsvlag ' done ' die niet intern is ingesteld en afhankelijk is van iets om dit in te stellen om de luisteraar te beëindigen en af te sluiten.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow