Windows tcp client server

Реализация TCP Server-Client в C

Предварительные условия — Socket Programming на C / C ++ , TCP и UDP-сервер с использованием select , реализация UDP Server-Client в C
Если мы создаем соединение между клиентом и сервером с использованием TCP, то у него мало функциональных возможностей, например, TCP подходит для приложений, требующих высокой надежности, а время передачи относительно менее критично. Он используется другими протоколами, такими как HTTP, HTTP, FTP, SMTP, Telnet. TCP переставляет пакеты данных в указанном порядке. Существует абсолютная гарантия того, что переданные данные остаются нетронутыми и поступают в том же порядке, в котором они были отправлены. TCP выполняет управление потоком данных и требует три пакета для установки сокетного соединения, прежде чем любые пользовательские данные могут быть отправлены. TCP управляет надежностью и контролем перегрузки. Это также делает проверку ошибок и исправление ошибок. Ошибочные пакеты повторно передаются от источника к месту назначения.

Весь процесс можно разбить на следующие этапы:

Весь процесс можно разбить на следующие этапы:

TCP-сервер —

  1. используя create (), создайте сокет TCP.
  2. используя bind (), связать сокет с адресом сервера.
  3. используя listen (), переведите сокет сервера в пассивный режим, в котором он ожидает, пока клиент подойдет к серверу, чтобы установить соединение
  4. используя accept (), на этом этапе устанавливается соединение между клиентом и сервером, и они готовы к передаче данных.
  5. Вернитесь к шагу 3.

TCP-клиент —

  1. Создать сокет TCP.
  2. подключите вновь созданный клиентский сокет к серверу.

#include
#include
#include
#include
#include
#include
#include
#define MAX 80
#define PORT 8080
#define SA struct sockaddr

// Функция предназначена для чата между клиентом и сервером.

void func( int sockfd)

// бесконечный цикл для чата

// читаем сообщение от клиента и копируем его в буфер

read(sockfd, buff, sizeof (buff));

// печать буфера, который содержит содержимое клиента

printf ( «From client: %s\t To client : » , buff);

// копировать сообщение сервера в буфер

while ((buff[n++] = getchar ()) != ‘\n’ )

// и отправить этот буфер клиенту

write(sockfd, buff, sizeof (buff));

// если сообщение содержит «Выход», то выход из сервера и чат закончились.

if ( strncmp ( «exit» , buff, 4) == 0) <

printf ( «Server Exit. \n» );

int sockfd, connfd, len;

struct sockaddr_in servaddr, cli;

// создание и проверка сокета

sockfd = socket(AF_INET, SOCK_STREAM, 0);

printf ( «socket creation failed. \n» );

printf ( «Socket successfully created..\n» );

// назначаем IP, PORT

// Привязка вновь созданного сокета к указанному IP и проверка

if ((bind(sockfd, (SA*)&servaddr, sizeof (servaddr))) != 0) <

printf ( «socket bind failed. \n» );

printf ( «Socket successfully binded..\n» );

// Теперь сервер готов к прослушиванию и проверке

if ((listen(sockfd, 5)) != 0) <

printf ( «Listen failed. \n» );

printf ( «Server listening..\n» );

len = sizeof (cli);

// Принимаем пакет данных от клиента и проверяем

connfd = accept(sockfd, (SA*)&cli, &len);

printf ( «server acccept failed. \n» );

printf ( «server acccept the client. \n» );

// Функция для общения между клиентом и сервером

// После разговора закройте сокет

#include
#include
#include
#include
#include
#define MAX 80
#define PORT 8080
#define SA struct sockaddr

Читайте также:  Установить диспетчер realtek hd windows 10 64 bit

void func( int sockfd)

bzero(buff, sizeof (buff));

printf ( «Enter the string : » );

while ((buff[n++] = getchar ()) != ‘\n’ )

write(sockfd, buff, sizeof (buff));

bzero(buff, sizeof (buff));

read(sockfd, buff, sizeof (buff));

printf ( «From Server : %s» , buff);

if (( strncmp (buff, «exit» , 4)) == 0) <

printf ( «Client Exit. \n» );

int sockfd, connfd;

struct sockaddr_in servaddr, cli;

// создание и изменение сокета

sockfd = socket(AF_INET, SOCK_STREAM, 0);

printf ( «socket creation failed. \n» );

printf ( «Socket successfully created..\n» );

// назначаем IP, PORT

servaddr.sin_addr.s_addr = inet_addr( «127.0.0.1» );

// подключаем сокет клиента к сокету сервера

if (connect(sockfd, (SA*)&servaddr, sizeof (servaddr)) != 0) <

printf ( «connection with the server failed. \n» );

printf ( «connected to the server..\n» );

// функция для чата

Компиляция —
Сторона сервера:
gcc server.c -o сервер
./server

Сторона клиента:
gcc client.c -o клиент
./client

Выход —
Сторона сервера:

Tcp Client Класс

Определение

Предоставляет клиентские подключения для сетевых служб протокола TCP. Provides client connections for TCP network services.

Примеры

В следующем примере кода устанавливается TcpClient соединение. The following code example establishes a TcpClient connection.

Комментарии

TcpClient Класс предоставляет простые методы для подключения, отправки и получения потоковых данных по сети в синхронном блокирующем режиме. The TcpClient class provides simple methods for connecting, sending, and receiving stream data over a network in synchronous blocking mode.

Для TcpClient подключения и обмена данными, TcpListener или, Socket созданный с помощью протокола TCP, ProtocolType необходимо прослушивать входящие запросы на подключение. 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:

Создайте TcpClient и вызовите один из трех доступных Connect методов. Create a TcpClient and call one of the three available Connect methods.

Создайте TcpClient с помощью имени узла и номера порта удаленного узла. Create a TcpClient using the host name and port number of the remote host. Этот конструктор будет автоматически пытаться установить соединение. This constructor will automatically attempt a connection.

Если вы хотите отправить датаграммы без соединений в режиме синхронной блокировки, используйте UdpClient класс. If you want to send connectionless datagrams in synchronous blocking mode, use the UdpClient class.

Примечания для тех, кто наследует этот метод

Для отправки и получения данных используйте GetStream() метод для получения NetworkStream . To send and receive data, use the GetStream() method to obtain a NetworkStream. Вызовите Write(Byte[], Int32, Int32) Read(Byte[], Int32, Int32) методы и объекта, 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. Используйте Close(Int32) метод, чтобы освободить все ресурсы, связанные с TcpClient . Use the Close(Int32) method to release all resources associated with the TcpClient.

Конструкторы

Инициализирует новый экземпляр класса TcpClient. Initializes a new instance of the TcpClient class.

Инициализирует новый экземпляр класса TcpClient с заданным семейством. Initializes a new instance of the TcpClient class with the specified family.

Читайте также:  Ahci включить windows 10 без переустановки системы

Инициализирует новый экземпляр класса TcpClient и связывает его с заданной локальной конечной точкой. Initializes a new instance of the TcpClient class and binds it to the specified local endpoint.

Инициализирует новый экземпляр класса TcpClient и подключает его к указанному порту заданного узла. Initializes a new instance of the TcpClient class and connects to the specified port on the specified host.

Свойства

Получает или задает значение, указывающее, установлено ли подключение. 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.

Возвращает или задает базовый объект Socket. Gets or sets the underlying Socket.

Возвращает значение, указывающее, подключен ли основной объект Socket для объекта TcpClient к удаленному узлу. Gets a value indicating whether the underlying Socket for a TcpClient is connected to a remote host.

Возвращает или задает значение Boolean, указывающее, разрешает ли объект TcpClient использовать порт только одному клиенту. 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.

Возвращает или задает длительность временного интервала, в течение которого объект TcpClient будет ожидать получение данных после инициации операции чтения. 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.

Возвращает или задает длительность временного интервала, в течение которого объект TcpClient будет ожидать успешного завершения операции отправки данных. Gets or sets the amount of time a TcpClient will wait for a send operation to complete successfully.

Методы

Начинает выполнение асинхронного запроса для подключения к удаленному узлу. Begins an asynchronous request for a remote host connection. Удаленный узел задается объектом IPAddress и номером порта (Int32). The remote host is specified by an IPAddress and a port number (Int32).

Начинает выполнение асинхронного запроса для подключения к удаленному узлу. Begins an asynchronous request for a remote host connection. Удаленный узел задается массивом IPAddress и номером порта (Int32). The remote host is specified by an IPAddress array and a port number (Int32).

Начинает выполнение асинхронного запроса для подключения к удаленному узлу. Begins an asynchronous request for a remote host connection. Удаленный узел задается именем узла (String) и номером порта (Int32). The remote host is specified by a host name (String) and a port number (Int32).

Удаляет данный экземпляр TcpClient и запрашивает закрытие базового подключения TCP. Disposes this TcpClient instance and requests that the underlying TCP connection be closed.

Читайте также:  Лицензия windows для малого бизнеса

Подключает клиента к удаленному TCP-узлу, используя указанный IP-адрес и номер порта. Connects the client to a remote TCP host using the specified IP address and port number.

Подключает клиента к удаленному TCP-узлу, используя указанный IP-адрес и номер порта. Connects the client to a remote TCP host using the specified IP addresses and port number.

Подключает клиента к удаленному TCP-узлу, используя указанную удаленную сетевую конечную точку. 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.

Подключает клиента к удаленному TCP-узлу, используя заданный IP-адрес и номер порта в асинхронной операции. Connects the client to a remote TCP host using the specified IP address and port number as an asynchronous operation.

Подключает клиента к удаленному TCP-узлу, используя заданный IP-адрес и номер порта в асинхронной операции. Connects the client to a remote TCP host using the specified IP address and port number as an asynchronous operation.

Подключает клиента к удаленному TCP-узлу, используя заданные IP-адреса и номер порта в асинхронной операции. Connects the client to a remote TCP host using the specified IP addresses and port number as an asynchronous operation.

Подключает клиента к удаленному TCP-узлу, используя заданные IP-адреса и номер порта в асинхронной операции. Connects the client to a remote TCP host using the specified IP addresses and port number as an asynchronous operation.

Подключает клиента к указанному TCP-порту заданного узла в асинхронной операции. Connects the client to the specified TCP port on the specified host as an asynchronous operation.

Подключает клиента к указанному TCP-порту заданного узла в асинхронной операции. Connects the client to the specified TCP port on the specified host as an asynchronous operation.

Освобождает все управляемые и неуправляемые ресурсы, используемые TcpClient. Releases the managed and unmanaged resources used by the TcpClient.

Освобождает неуправляемые ресурсы, используемые объектом 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.

(Унаследовано от Object) Finalize()

Освобождает ресурсы, используемые классом TcpClient. Frees resources used by the TcpClient class.

Служит хэш-функцией по умолчанию. Serves as the default hash function.

(Унаследовано от Object) GetStream()

Возвращает объект NetworkStream, используемый для отправки и получения данных. Returns the NetworkStream used to send and receive data.

Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.

(Унаследовано от Object) MemberwiseClone()

Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

(Унаследовано от Object) ToString()

Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.

(Унаследовано от Object)

Явные реализации интерфейса

Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода.

Освобождает все ресурсы, занятые модулем TcpClient. Releases all resources used by the TcpClient.

Оцените статью