Доброго времени суток, я вернулся на любимый форум!
Пишу уже с 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:
надеюсь, то кому-то подобное пригодится
