Поделиться через


TcpClient.GetStream Метод

Определение

Возвращает используемые для отправки NetworkStream и получения данных.

public:
 System::Net::Sockets::NetworkStream ^ GetStream();
public System.Net.Sockets.NetworkStream GetStream();
member this.GetStream : unit -> System.Net.Sockets.NetworkStream
Public Function GetStream () As NetworkStream

Возвращаемое значение

Базовый NetworkStream.

Исключения

Не TcpClient подключен к удаленному узлу.

Он TcpClient был закрыт.

Примеры

В следующем примере кода используется GetStream для получения базового NetworkStreamкода. После получения NetworkStreamобъекта он отправляет и получает его с помощью методов Write и Read методов.

using TcpClient tcpClient = new TcpClient();
tcpClient.ConnectAsync("contoso.com", 5000);

using NetworkStream netStream = tcpClient.GetStream();

// Send some data to the peer.
byte[] sendBuffer = Encoding.UTF8.GetBytes("Is anybody there?");
netStream.Write(sendBuffer);

// Receive some data from the peer.
byte[] receiveBuffer = new byte[1024];
int bytesReceived = netStream.Read(receiveBuffer);
string data = Encoding.UTF8.GetString(receiveBuffer.AsSpan(0, bytesReceived));

Console.WriteLine($"This is what the peer sent to you: {data}");
     Dim tcpClient As New TcpClient()
     ' Uses the GetStream public method to return the NetworkStream.

        Dim netStream As NetworkStream = tcpClient.GetStream()
        If netStream.CanWrite Then
           Dim sendBytes As [Byte]() = Encoding.UTF8.GetBytes("Is anybody there?")
           netStream.Write(sendBytes, 0, sendBytes.Length)
        Else
           Console.WriteLine("You cannot write data to this stream.")
           tcpClient.Close()
           ' Closing the tcpClient instance does not close the network stream.
           netStream.Close()
           Return
        End If
        If netStream.CanRead Then
           
           ' Reads the NetworkStream into a byte buffer.
           Dim bytes(tcpClient.ReceiveBufferSize) As Byte
           ' Read can return anything from 0 to numBytesToRead. 
           ' This method blocks until at least one byte is read.
           netStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
           
           ' Returns the data received from the host to the console.
           Dim returndata As String = Encoding.ASCII.GetString(bytes)
           Console.WriteLine(("This is what the host returned to you: " + returndata))
        Else
           Console.WriteLine("You cannot read data from this stream.")
           tcpClient.Close()
           ' Closing the tcpClient instance does not close the network stream.
           netStream.Close()
           Return
        End If

     ' Uses the Close public method to close the network stream and socket.
     tcpClient.Close()
  End Sub

Комментарии

Метод GetStream возвращает NetworkStream значение, которое можно использовать для отправки и получения данных. Класс NetworkStream наследует от Stream класса, который предоставляет широкий набор методов и свойств, используемых для упрощения сетевого взаимодействия.

Сначала необходимо вызвать Connect метод, или GetStream метод вызовет InvalidOperationExceptionисключение. После получения NetworkStreamметода вызовите Write метод для отправки данных на удаленный узел. Read Вызовите метод для получения данных, поступающих из удаленного узла. Оба этих метода блокируются до выполнения указанной операции. Можно избежать блокировки операции чтения, проверив DataAvailable свойство. Значение true означает, что данные прибыли из удаленного узла и доступны для чтения. В этом случае Read гарантированно завершиться немедленно. Если удаленный узел завершит работу подключения, Read немедленно вернется с нулевыми байтами.

Замечание

Если вы получаете SocketExceptionкод ошибки, используйте SocketException.ErrorCode для получения определенного кода ошибки. Получив этот код, вы можете ознакомиться с документацией по коду ошибки API для сокетов Windows версии 2 , чтобы получить подробное описание ошибки.

Замечание

Этот элемент выводит сведения о трассировке при включении трассировки сети в приложении. Дополнительные сведения см. в разделе "Трассировка сети" в .NET Framework.

Применяется к

См. также раздел