Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [For Noobs] Библиотека для удобной работы с сокетами  (Прочитано 862 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн egorchik007

  • Автор темы
  • Участник
  • *
  • Сообщений: 156
    • Просмотр профиля
Доброго времени суток, я вернулся на любимый форум!
Пишу уже с Mac OS, но всем начинающим unix-программистам может пригодится сие чудо.
Собственно, задачей было не разработать мощное решение, а так, набор для старта,
просто скрывающий на первое время сложные вещи.
Писал для себя, описываю, что нужно от программиста:

1.  Библиотеки.
Подключаем такие:
#include <iostream> //по желанию, кто по старинке printf-ом, кто так.
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#include "sockets.h" //собственно сей труд

2. Объявить дескриптор (указатель, "id") сокета и поле адреса:
int sock;
struct sockaddr_in addr;

3. Заюзать фунц-ии библиотеки
create_socket (sock); //заводит сокет
set_address (addr, 127,0,0,1, 3425); //адрес и порт (назначения  :) )
socket_connect (sock, addr); //соединение

Эта и была как раз наиболее сложная часть работы с сокетами. А дальше, как слать данные и читать их,
читаем тут.
В той статье абзацы про создание сокета и т.п. можете пропускать, зубрите  send и recv.

Сама библиотечка (крохотная, даже и не библиотека, а просто несколько фун-ций)
sockets.h
long int get_addr (int, int, int, int);
void create_socket (int& s) {
    s = socket (AF_INET,SOCK_STREAM, 0);
    if(s < 0)
    {
        perror("socket");
        exit(1);
    }
}
void set_address (struct sockaddr_in& addr, int a, int b, int c, int d, int port) {
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    addr.sin_addr.s_addr = htonl(get_addr (a,b,c,d) );
}


void socket_connect (int& sock, struct sockaddr_in& addr) {
    if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("ашипка, блина");
        exit(2);
    }
}

long int get_addr (int a, int b, int c, int d) {
    long int result = a*256*256*256 +b*256*256 +c*256 +d;
    return result;
}




Пользователь решил продолжить мысль 18 Декабря 2011, 02:06:24:
надеюсь, то кому-то подобное пригодится ;)
« Последнее редактирование: 18 Декабря 2011, 02:06:24 от egorchik007 »

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.