Программирование сокетов на языке C с помощью C Socket

Сокет – это механизм, который позволяет программам обмениваться данными по сети.

Он является основой для построения сетевых приложений и предоставляет API (Application Programming Interface) для взаимодействия между программами через сетевые протоколы, такие как TCP (Transmission Control Protocol) и UDP (User Datagram Protocol).

C является одним из популярных языков программирования для работы с сокетами. Он предоставляет богатый набор функций и структур данных для создания, настройки и использования сокетов.

Для работы с сокетами в языке C используется библиотека сокетов, называемая "socket.h". В этой библиотеке определены различные функции и константы, необходимые для работы с сокетами.

Приведу примеры кода на языке C для создания простого TCP сервера и клиента:

Пример 1: Простой TCP сервер:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define PORT 8080

int main(int argc, char const *argv[]) {
    int server_fd, new_socket, valread;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    char *hello = "Hello from server";

    // Создание дескриптора сокета
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // Настройка опций сокета
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }

    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);

    // Привязка сокета к указанному порту
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    // Ожидание подключения клиента
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }

    // Принятие подключения клиента
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }

    // Чтение данных от клиента
    valread = read(new_socket , buffer, 1024);
    printf("%s\n",buffer );

    // Отправка данных клиенту
    send(new_socket , hello , strlen(hello) , 0);
    printf("Hello message sent\n");

    return 0;
}

Пример 2: Простой TCP клиент:


#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define PORT 8080

int main(int argc, char const *argv[]) {
    int sock = 0, valread;
    struct sockaddr_in serv_addr;
    char *hello = "Hello from client";
    char buffer[1024] = {0};

    // Создание дескриптора сокета
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("\n Socket creation error \n");
        return -1;
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);

    // Преобразование IP адреса из текстового в бинарный формат
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {
        printf("\nInvalid address/ Address not supported \n");
        return -1;
    }

    // Подключение к серверу
    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        printf("\nConnection Failed \n");
        return -1;
    }

    // Отправка данных серверу
    send(sock , hello , strlen(hello) , 0);
    printf("Hello message sent\n");

    // Чтение данных от сервера
    valread = read( sock , buffer, 1024);
    printf("%s\n",buffer );

    return 0;
}

Эти примеры демонстрируют простейший пример TCP сервера и клиента на языке C, которые обмениваются сообщениями. Они создают сокет, настраивают его, выполняют подключение и обмениваются данными.

Однако, приведенные примеры представляют только базовое использование сокетов в языке C, и использование сокетов может быть гораздо более сложным и мощным. С использованием сокетов в языке C вы можете создавать различные типы сетевых приложений, такие как веб-серверы, клиенты для обмена сообщениями, приложения для передачи файлов и многое другое.

Надеюсь, что данный развернутый ответ и примеры кода помогут вам лучше понять работу с сокетами в языке C. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать. Я с удовольствием помогу вам!

Похожие вопросы на: "c socket "

Шрифты HTML: основные принципы и возможности
Асинхронное программирование в Python с использованием asyncio
<h1>c break
PHP time - управление временем в PHP
Useref: использование useRef в React
Java int: основные типы данных в языке программирования Java
Факториал в Python
Сollaboratory - сотрудничество и инновации для вашего успеха
Регулярные выражения в Java
Генератор даты