Vb net tcpclient передать файл пример
Рассмотрим, как создать сервер, работающий по протоколу TCP, с помощью сокетов. Общая схема работы серверного сокета TCP будет следующей:
Код программы сервера будет таким:
Вначале после создания сокета связываем его с локальной точкой методом Bind:
Сокет будет прослушивать подключения по 8005 порту на локальном адресе 127.0.0.1. То есть клиент должен будет подключаться к локальному адресу и порту 8005.
Далее начинаем прослушивание:
Метод Listen вызывается только после метода Bind. В качестве параметра он принимает количество входящих подключений, которые могут быть поставлены в очередь сокета.
После вызова метода Listen начинается прослушивание входящих подключений, и если подключения приходят на сокет, то их можно получить с помощью метода Accept:
Метод Accept извлекает из очереди ожидающих запрос первый запрос и создает для его обработки объект Socket. Если очередь запросов пуста, то метод Accept блокирует вызывающий поток до появления нового подключения.
Для обработки запроса сначала в цикле do..while получаем данные с помощью метода Receive:
Метод Receive в качестве параметра принимает массив байтов, в который считываются полученные данные, и возвращает количество полученных байтов.
Если отсутствуют данные, доступные для чтения, метод Receive блокирует вызывающий поток до тех пор, пока не станут доступны данные, если не было установлено значение тайм-аута путем использования объекта Socket.ReceiveTimeout. Если значение тайм-аута было превышено, объект Receive выдаст исключение SocketException. Чтобы отследить наличие данных в потоке, используется свойство Available .
В конце обработки запроса надо закрыть связанный с ним сокет:
Вызов метода Shutdown() перед закрытием сокета гарантирует, что не останется никаких необработанных данных. Этот метод в качестве параметра принимает значение из перечисления SocketShutdown :
Both : остановка как отправки, так и получения данных сокетом
Receive : остановка получения данных
Send : остановка отправки данных
Примечания для тех, кто наследует этот метод
Для отправки и получения данных используйте GetStream() метод для получения NetworkStream. Write(Byte[], Int32, Int32) Вызовите методы Read(Byte[], Int32, Int32) и методы отправки NetworkStream и получения данных с удаленным узлом. Close(Int32) Используйте метод, чтобы освободить все ресурсы, связанные с .TcpClient
Properties
Gets or sets a value that indicates whether a connection has been made.
Gets the amount of data that has been received from the network and is available to be read.
Gets or sets the underlying Socket.
Gets a value indicating whether the underlying Socket for a TcpClient is connected to a remote host.
Gets or sets a Boolean value that specifies whether the TcpClient allows only one client to use a port.
Gets or sets information about the linger state of the associated socket.
Gets or sets a value that disables a delay when send or receive buffers are not full.
Gets or sets the size of the receive buffer.
Gets or sets the amount of time a TcpClient will wait to receive data once a read operation is initiated.
Gets or sets the size of the send buffer.
Gets or sets the amount of time a TcpClient will wait for a send operation to complete successfully.
Examples
The following code example establishes a TcpClient connection.
Комментарии
Класс TcpClient предоставляет простые методы для подключения, отправки и получения потоковых данных по сети в синхронном режиме блокировки.
Чтобы TcpClient подключиться и обмениваться данными, TcpListener необходимо прослушивать входящие запросы на подключение или Socket создание с помощью TCP ProtocolType . Вы можете подключиться к этому прослушивателю одним из следующих двух способов:
TcpClient Создайте и вызовите один из трех доступных Connect методов.
TcpClient Создайте имя узла и номер порта удаленного узла. Этот конструктор будет автоматически пытаться подключиться.
Комментарии
Параметр flags предоставляет поставщику службы "Сокеты окон" дополнительные сведения о передаче файлов. Дополнительные сведения об использовании этого параметра см. в разделе TransmitFileOptions.
Этот метод использует функцию, найденную TransmitFile в API Windows Sockets 2. Дополнительные сведения о TransmitFile функции и ее флагах см. в документации по Windows Sockets.
SendFileсинхронно отправляет файл удаленному узлу, указанному в методе или Accept методеConnect. SendFile можно использовать как для протоколов, ориентированных на подключение, так и для протоколов без подключения.
Если используется протокол без подключения, необходимо вызвать Connect перед вызовом этого метода; в противном случае SendFile вызывается исключение SocketException. Если вы используете протокол, ориентированный на подключение, необходимо Connect либо установить подключение к удаленному узлу, либо использовать для Accept принятия входящего подключения.
Если вы используете протокол, ориентированный на подключение, блокируется до тех пор, SendFile пока не будет отправлен весь файл. В режиме SendFile неблокировки может завершиться успешно до отправки всего файла. Нет никакой гарантии, что отправляемые данные будут отображаться в сети немедленно. Чтобы повысить эффективность сети, базовая система может отложить передачу до сбора значительного объема исходящих данных. Успешное завершение SendFile метода означает, что в базовой системе было место для буферизации данных для отправки по сети.
При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows Sockets версии 2, чтобы получить подробное описание ошибки.
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Provides client connections for TCP network services.
SendFile(String)
Отправляет файл fileName на подключенный объект Socket, используя флаг передачи UseDefaultWorkerThread.
Параметры
Параметр типа String, содержащий имя отправляемого файла и путь к нему. Этот параметр может иметь значение null .
Исключения
Сокет не подключен к удаленному узлу.
Объект Socket не находится в режиме блокировки и не может принять этот синхронный вызов.
Файл fileName не найден.
Произошла ошибка при попытке доступа к сокету.
Примеры
В следующем примере кода создается и подключается сокет, а затем отправляется файл на удаленный узел. Файл "test.txt" находится в корневом каталоге локального компьютера.
Methods
Begins an asynchronous request for a remote host connection. The remote host is specified by an IPAddress and a port number (Int32).
Begins an asynchronous request for a remote host connection. The remote host is specified by an IPAddress array and a port number (Int32).
Begins an asynchronous request for a remote host connection. The remote host is specified by a host name (String) and a port number (Int32).
Disposes this TcpClient instance and requests that the underlying TCP connection be closed.
Connects the client to a remote TCP host using the specified IP address and port number.
Connects the client to a remote TCP host using the specified IP addresses and port number.
Connects the client to a remote TCP host using the specified remote network endpoint.
Connects the client to the specified port on the specified host.
Connects the client to a remote TCP host using the specified IP address and port number as an asynchronous operation.
Connects the client to a remote TCP host using the specified IP address and port number as an asynchronous operation.
Connects the client to a remote TCP host using the specified IP addresses and port number as an asynchronous operation.
Connects the client to a remote TCP host using the specified IP addresses and port number as an asynchronous operation.
Connects the client to a remote TCP host using the specified endpoint as an asynchronous operation.
Connects the client to a remote TCP host using the specified endpoint as an asynchronous operation.
Connects the client to the specified TCP port on the specified host as an asynchronous operation.
Connects the client to the specified TCP port on the specified host as an asynchronous operation.
Releases the managed and unmanaged resources used by the TcpClient.
Releases the unmanaged resources used by the TcpClient and optionally releases the managed resources.
Ends a pending asynchronous connection attempt.
Determines whether the specified object is equal to the current object.
Frees resources used by the TcpClient class.
Serves as the default hash function.
Returns the NetworkStream used to send and receive data.
Gets the Type of the current instance.
Creates a shallow copy of the current Object.
Returns a string that represents the current object.
Методы
Начинает выполнение асинхронного запроса для подключения к удаленному узлу. Удаленный узел задается объектом IPAddress и номером порта (Int32).
Начинает выполнение асинхронного запроса для подключения к удаленному узлу. Удаленный узел задается массивом IPAddress и номером порта (Int32).
Начинает выполнение асинхронного запроса для подключения к удаленному узлу. Удаленный узел задается именем узла (String) и номером порта (Int32).
Удаляет данный экземпляр TcpClient и запрашивает закрытие базового подключения TCP.
Подключает клиента к удаленному TCP-узлу, используя указанный IP-адрес и номер порта.
Подключает клиента к удаленному TCP-узлу, используя указанный IP-адрес и номер порта.
Подключает клиента к удаленному TCP-узлу, используя указанную удаленную сетевую конечную точку.
Подключает клиента к указанному порту заданного узла.
Подключает клиента к удаленному TCP-узлу, используя заданный IP-адрес и номер порта в асинхронной операции.
Подключает клиента к удаленному TCP-узлу, используя заданный IP-адрес и номер порта в асинхронной операции.
Подключает клиента к удаленному TCP-узлу, используя заданные IP-адреса и номер порта в асинхронной операции.
Подключает клиента к удаленному TCP-узлу, используя заданные IP-адреса и номер порта в асинхронной операции.
Подключает клиент к удаленному узлу TCP, используя указанную конечную точку в качестве асинхронной операции.
Подключает клиент к удаленному узлу TCP, используя указанную конечную точку в качестве асинхронной операции.
Подключает клиента к указанному TCP-порту заданного узла в асинхронной операции.
Подключает клиента к указанному TCP-порту заданного узла в асинхронной операции.
Освобождает все управляемые и неуправляемые ресурсы, используемые TcpClient.
Освобождает неуправляемые ресурсы, используемые объектом TcpClient, а при необходимости освобождает также управляемые ресурсы.
Завершает ожидающую асинхронную попытку на подключение.
Определяет, равен ли указанный объект текущему объекту.
Освобождает ресурсы, используемые классом TcpClient.
Служит хэш-функцией по умолчанию.
Возвращает объект NetworkStream, используемый для отправки и получения данных.
Возвращает объект Type для текущего экземпляра.
Создает неполную копию текущего объекта Object.
Возвращает строку, представляющую текущий объект.
Применяется к
Явные реализации интерфейса
Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода.
TcpClient и TcpListener
Помогите разобраться. Текст сервера: //Создаем TcpListener IPAddress.
TcpClient и TcpListener
Как отправлять данные не по локальной сети а через интернет? Например у меня есть айпи который.
TcpListener/TcpClient BinaryReader/BinaryWriter проблема с файлами
Доброго времени суток. Появилась проблема, а конкретнее: Если я передаю файл от сервера до.
В принципе с ними работать довольно просто
вот пример тср-сервера:
вот по аналогии:
выдают все что нужно, данные те что нужно.
не удается запсиать данные в транспортное соединение: Программа на вашем хост-компьютере разорвала установленное подключение.
тут же все работает:
я пишу TEST, возвращает OK. закрывает соединение тоже сервер.
почему тогда модуль выдает ошибку.
p.s. если вписать левые ip/порт то висит с минуты - потолторы, а потом выдает что нет соединения.
если вписать правильные ip port то выдает выше написаное про разрыв соединения.
Добавлено через 31 минуту
странно, пытаюсь из под винды, не получается:
не получается ввести слово test целиком, даже если из буфера вставлять.
Добавлено через 7 часов 15 минут
смотрел по логам:
код нормально отсылает запрос, но почему то не принимает ответ:
видно что запрос принят и отпрвлен ответ.
но почему почему тогда винда его не видит?
код случайно не ждет ответ на том же порту на каком посылал запрос?
P.S. Telnet тут нипричем, он не в том протоколе работает оказывается. код правильно. до определенного момента
P.P.S. вчитался в код. и понял ошибку.
я то тока отправляю данные а принимать не принимаю.
но не работает, выдает пустое значение.
в чем ошибся?
запрос идет, в логах пишет, а тут нуль.
Ну так можно, например, ввести значение порта в какое-нибудь текстовое поле, а затем значение этого поля вставить в конструктор TcpListener. Или это не катит?
Ну так можно, например, ввести значение порта в какое-нибудь текстовое поле, а затем значение этого поля вставить в конструктор TcpListener. Или это не катит?
эм.
это как если ВХОДЯЩИЙ порт задается сервером.
я же имел в виду:
мы отправляем запрос и получаем ответ..
так вот запрос отправляется на определенном порту. и запрос отправляется. тут все работает.
а вот как принять ответ, не зная на каком порту ответит сервер, я не знаю.
щаз вот так:
посылаем запрос и ждем ответа. сервер смотрит что за запрос и посылает нужный ответ. так я ответ не могу поймать программой, т.к.сервер отвечает по другому порту.
через телнет получается же.
эм.
это как если ВХОДЯЩИЙ порт задается сервером.
я же имел в виду:
мы отправляем запрос и получаем ответ..
так вот запрос отправляется на определенном порту. и запрос отправляется. тут все работает.
а вот как принять ответ, не зная на каком порту ответит сервер, я не знаю.
щаз вот так:
посылаем запрос и ждем ответа. сервер смотрит что за запрос и посылает нужный ответ. так я ответ не могу поймать программой, т.к.сервер отвечает по другому порту.
через телнет получается же.
Я вообще не понял про что это. Сервер только получает инфу, а клиент посылает запрос к серверу. И в чем проблема тоже не понимаю, задай везде один порт, что мешает, тоже не понимаю.
Constructors
Initializes a new instance of the TcpClient class.
Initializes a new instance of the TcpClient class with the specified family.
Initializes a new instance of the TcpClient class and binds it to the specified local endpoint.
Initializes a new instance of the TcpClient class and connects to the specified port on the specified host.
SendFile(String, Byte[], Byte[], TransmitFileOptions)
Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.
Параметры
Путь и имя отправляемого файла. Этот параметр может иметь значение null .
Данные, отправляемые перед отправкой файла. Этот параметр может иметь значение null .
Данные, отправляемые после отправки файла. Этот параметр может иметь значение null .
Побитовое сочетание значений перечисления, указывающее способ передачи файла.
Исключения
Операционной системой не является Windows NT или более поздняя версия.
Сокет не подключен к удаленному узлу.
Объект Socket не находится в режиме блокировки и не может принять этот синхронный вызов.
Файл fileName не найден.
Произошла ошибка при попытке доступа к сокету.
Explicit Interface Implementations
This API supports the product infrastructure and is not intended to be used directly from your code.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет клиентские подключения для сетевых служб протокола TCP.
Клиент
Теперь добавим проект для клиента. Общая схема работы клиента на сокетах будет немного отличаться:
Полный код клиента:
Для клиента характерно все то же самое, только теперь после создания сокета вызывается метод Connect() , в который передается адрес сервера:
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет синхронную передачу файла и дополнительных данных на подключенный объект Socket.
Примеры
В следующем примере кода создается и подключается сокет. Файл "test.txt" находится в корневом каталоге локального компьютера. В этом примере мы создадим prebuffer и postbuffer данных и отправим их на удаленный узел с файлом. Используется значение по умолчанию TransmitFileOptions .
Конструкторы
Инициализирует новый экземпляр класса TcpClient.
Инициализирует новый экземпляр класса TcpClient с заданным семейством.
Инициализирует новый экземпляр класса TcpClient и связывает его с заданной локальной конечной точкой.
Инициализирует новый экземпляр класса TcpClient и подключает его к указанному порту заданного узла.
Свойства
Получает или задает значение, указывающее, установлено ли подключение.
Возвращает значение, указывающее количество полученных из сети и доступных для чтения данных.
Возвращает или задает базовый объект Socket.
Возвращает значение, указывающее, подключен ли основной объект Socket для объекта TcpClient к удаленному узлу.
Возвращает или задает значение Boolean, указывающее, разрешает ли объект TcpClient использовать порт только одному клиенту.
Получает или задает информацию о состоянии задержки связанного сокета.
Возвращает или задает значение, которое отключает задержку в том случае, когда буферы отправки и получения не заполнены.
Возвращает или задает размер буфера приема.
Возвращает или задает длительность временного интервала, в течение которого объект TcpClient будет ожидать получение данных после инициации операции чтения.
Возвращает или задает размер буфера отправки.
Возвращает или задает длительность временного интервала, в течение которого объект TcpClient будет ожидать успешного завершения операции отправки данных.
Remarks
The TcpClient class provides simple methods for connecting, sending, and receiving stream data over a network in synchronous blocking mode.
In order for TcpClient to connect and exchange data, a TcpListener or Socket created with the TCP ProtocolType must be listening for incoming connection requests. You can connect to this listener in one of the following two ways:
Create a TcpClient and call one of the three available Connect methods.
Create a TcpClient using the host name and port number of the remote host. This constructor will automatically attempt a connection.
If you want to send connectionless datagrams in synchronous blocking mode, use the UdpClient class.
Клиент
Теперь добавим проект для клиента. Общая схема работы клиента на сокетах будет немного отличаться:
Полный код клиента:
Для клиента характерно все то же самое, только теперь после создания сокета вызывается метод Connect() , в который передается адрес сервера:
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет синхронную передачу файла и дополнительных данных на подключенный объект Socket.
Комментарии
Эта перегрузка отправляет файл fileName в подключенный сокет. Параметр flags по умолчанию ( UseDefaultWorkerThread 0) и preBuffer postBuffer параметры по умолчанию null . Если fileName он находится в локальном каталоге, его можно идентифицировать только с именем файла; в противном случае необходимо указать полный путь и имя файла. Подстановочные знаки ("..\ поддерживаются имена общих папок\myfile.txt") и UNC (\\\\shared directory\\myfile.txt). Если файл не найден, возникает исключение FileNotFoundException .
Этот метод использует функцию, найденную TransmitFile в API Windows Sockets 2. Дополнительные сведения о TransmitFile функции и ее флагах см. в документации по Windows Sockets.
SendFileсинхронно отправляет файл удаленному узлу, указанному в методе или Accept методеConnect. SendFile можно использовать как для протоколов, ориентированных на подключение, так и для протоколов без подключения.
Если вы используете протокол без подключения, необходимо вызвать Connect перед вызовом SocketException этого метода, в противном случае SendFile возникнет исключение. Если вы используете протокол, ориентированный на подключение, необходимо Connect либо установить подключение к удаленному узлу, либо использовать для Accept принятия входящего подключения.
Если вы используете протокол, ориентированный на подключение, блокируется до тех пор, SendFile пока файл не будет отправлен. В режиме SendFile неблокировки может завершиться успешно до отправки всего файла. Нет никакой гарантии, что отправляемые данные будут отображаться в сети немедленно. Чтобы повысить эффективность сети, базовая система может отложить передачу до сбора значительного объема исходящих данных. Успешное завершение SendFile метода означает, что в базовой системе было место для буферизации данных для отправки по сети.
При получении SocketExceptionсвойства используйте SocketException.ErrorCode свойство для получения определенного кода ошибки. Получив этот код, ознакомьтесь с документацией по коду ошибки API Windows Sockets версии 2, чтобы получить подробное описание ошибки.
Примеры
В следующем примере кода устанавливается TcpClient подключение.
Notes to Inheritors
To send and receive data, use the GetStream() method to obtain a NetworkStream. Call the Write(Byte[], Int32, Int32) and Read(Byte[], Int32, Int32) methods of the NetworkStream to send and receive data with the remote host. Use the Close(Int32) method to release all resources associated with the TcpClient.
Перегрузки
Отправляет файл fileName на подключенный объект Socket, используя флаг передачи UseDefaultWorkerThread.
Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.
Отправляет файл fileName и буферы данных в подключенный объект Socket, используя указанное значение TransmitFileOptions.
Читайте также: