TX Library Help – Version: 00173a, Revision: 174
 ALL  Windows graphics in a sandbox

[TXNetwork] Сокет TXNetwork

[TXNetwork] Библиотека сети тупых художников TXNetwork Подробнее...

Классы

class  TX_SOCKET
 Cокет TXLib'a. Подробнее...

Макросы

#define TX_BROADCAST   "255.255.255.255"
 Широковещательный IP-адрес TXNetwork'a.
#define TX_STD_PORT   27050
 Стандартный порт TXNetwork'a.
#define TX_LOCALHOST   "127.0.0.1"
 IP-адрес компьютера, на которм запущен компьютер.

Перечисления

enum  sock_type {
  TX_SERVER = 1,
  TX_CLIENT = 2,
  TX_BLOCK = 3,
  TX_NONBLOCK = 4,
  TX_NOTYPE = -1
}
 

Типы сокета.

Подробнее...

Функции

TX_SOCKET txCreateSocket (sock_type type, const char *IP=NULL, int port=TX_STD_PORT, sock_type blocking=TX_BLOCK, bool useTCP=true, const unsigned OueueSize=0x10)
 Создаёт сокет TXNetwork.
int txSendTo (TX_SOCKET &to, const void *buf, int size_buf)
 Функция для отправки данных через сокет
int txRecvFrom (TX_SOCKET &to, void *buf, int size_buf)
 Функция для приема данных через сокет
int txnAssert (TX_SOCKET &asr)
 Функция для проверки сокета
int txChangeSockType (TX_SOCKET &to, sock_type blocking)
 Функция для изменения типа (синхронный - не синхронный) сокета.
SOCKET * txGetWinSocket (TX_SOCKET &what, bool main)
 Функция, которая возвращает сокет winsock'а.

Подробное описание

[TXNetwork] Библиотека сети тупых художников TXNetwork

Описание
TXNetwork - Расширение TXLib'a для "работы с сетью", связи между компьютерами по сети. Философия библиотеки наследуется от TXLib'a, следовательно, не все есть в готовом виде, что хотелось бы использовать. Оставшееся делайте ручками. :)

А также сообщайте мне обо всем (e-mail: vova@txlib.ru).

Версия:
0.6.3a
Автор:
Copyright (C) _RedMan_ (Vova Yurovsky) <vova@txlib.ru>, 7-8 класс
Дата:
2015-2016
Библиотека создает свой тип (класс C++) TX_SOCKET. Он по использованию похож на HDC Win32 и TXLib'a. Работать с ним надо только через функции этого класса.
Также есть примеры. Смотри в файлах в папке Examples.
Так как библиотека находится на стадии тестирования, то просьба писать мне (автору) обо всех с ней проблемах по адресу: <vova@txlib.ru>.
Как и с чем это использовать?
Библиотека TXNetwork использует другие библиотеки, которые используют технологию раздельной компиляции. Для работы TXNetwork нужно в настройках линкера указать компоновку с библиотекой ws2_32.

В Code::Blocks настройки линкера находятся "Settings/Compiler". Далее выбираете вкладку "Linker Settings", и смотрите в левую панель. Если там уже указано "ws2_32", то все хорошо. Иначе нажмите кнопку "Add", и введите это название. Нажмите "ОК". Теперь TXNetwork   котов   готов к работе с вами.

Либо в командной строке компилятора надо указать опцию -l ws2_32.
Предупреждения:
- Библиотека находится в состоянии альфа-тестирования. Обо всех ошибках сообщайте на почту vova@txlib.ru.
- При использовании совместно с TXLib: Подключайте TXNetwork ПЕРЕД TXLib'ом .
- TXNetwork удаляет определение (#undef) __STRICT_ANSI__ для совместимости с TXLib'ом

Разделы системы помощи


Очень простой пример

Файл: proto.h
общие структуры и константы клиента и сервера










// proto.h

// 1. server -> client: Message (char[Message_size])
// 2. server <- client: Message (char[Message_size])

#include "TXNetwork.h"
#include "TXLib.h"

const size_t Message_size = 256;
Файл: server.cpp
Смотрите помощь по функциям TXNetwork - нажимайте на светло-синенькое :)












// server.cpp

#include "proto.h"

int main()
{
txCreateWindow (1024, 768);

printf ("Searching for client...\n");
TX_SOCKET client = txCreateSocket (TX_SERVER, "");

char str[Message_size] = "";

printf ("out: ");
scanf ("%s", str);
txSendTo (client, str, Message_size);

txRecvFrom (client, str, Message_size);
printf ("in: %s\n", str);

return 0;
}
Файл: client.cpp
Смотрите помощь по функциям TXNetwork - нажимайте на светло-синенькое :)














// client.cpp

#include "proto.h"

#define SERVER_IP "localhost" //IP адрес писать здесь.

int main()
{
txCreateWindow (1024, 768);

printf ("Searching for server...\n");
TX_SOCKET client = txCreateSocket (TX_CLIENT, SERVER_IP);

char str[Message_size] = "";

txRecvFrom (client, str, Message_size);
printf ("in: %s\nout: ", str);

scanf ("%s", str);
txSendTo (client, str, Message_size);

return 0;
}

Другие примеры:


Макросы

#define TX_BROADCAST   "255.255.255.255"

Широковещательный IP-адрес TXNetwork'a.

IP-адрес, с которого все компьютеры принимают сообщения, посланые на этот адрес.

См. определение в файле TXNetwork.h строка 160

#define TX_STD_PORT   27050

Стандартный порт TXNetwork'a.

Стандартный номер порта. Учти, юный программист, что на один порт может быть повешен только один сокет!

См. определение в файле TXNetwork.h строка 168

#define TX_LOCALHOST   "127.0.0.1"

IP-адрес компьютера, на которм запущен компьютер.

IP-адрес твоего компьютера. Он верен только с точки зрения самого компьютера.

См. определение в файле TXNetwork.h строка 175


Перечисления

enum sock_type

Типы сокета.

Элементы перечислений:
TX_SERVER 

Сокет является сервером, создается первым.

TX_CLIENT 

Сокет является клиентом.

TX_BLOCK 

Сокет блокирует выполнение программы во время приема/передачи.

TX_NONBLOCK 

Сокет не блокирует выполнение программы во время приема/передачи.

TX_NOTYPE 

Если не знаешь или не уверен.

См. определение в файле TXNetwork.h строка 201


Функции

TX_SOCKET txCreateSocket ( sock_type  type,
const char *  IP = NULL,
int  port = TX_STD_PORT,
sock_type  blocking = TX_BLOCK,
bool  useTCP = true,
const unsigned  OueueSize = 0x10 
)

Создаёт сокет TXNetwork.

Аргументы:
typeТип сокета: клиент (TX_CLIENT) или сервер (TX_SERVER).
IPIP-адрес компьютера, с которым будет создан сокет. Если тип сокета type - TX_SERVER, то этот параметр может быть пустой строкой.
portПорт компьютеров, на котором будет "висеть" сокет.
blockingТип сокета (блокирующий или неблокирующий).
useTCPЕсли false, то используется протокол UDP. Иначе TCP.
OueueSize  Черная магия   Размер очереди обрабатываемых клиентов для listen. Use Google, Luck
Возвращает:
Сокет TXNetwork'a.
Пример
           txCreateSocket (TX_CLIENT, "192.168.0.1", 107);   // Подключаемся по telnet'у
           txCreateSocket (TX_SERVER, "",          27051);   // Поднимаем сервер своей игры. Ю-ху!
int txSendTo ( TX_SOCKET to,
const void *  buf,
int  size_buf 
)

Функция для отправки данных через сокет

Cокет TXLib'a.

Аргументы:
toСокет, через который нужно передать данные.
bufБуфер, который будет передан.
size_bufРазмер буфера.
Возвращает:
Код ошибки. Подробнее см. MSDN.
Пример 1
              TX_SOCEKT game_server = txCreateSocket (...);    // Создаем сокет
              ...
    
              int x = 0, y = 0;
              ...
    
              char coordinates[200] = "";                      // Создаем строку для параметров
              sprintf (coordinates, "x = %d, y = %d", x, y);   // Печатаем значения параметров в строку
    
              txSendTo (game_server, coordinates, 200);        // Передаем координаты как текст
Пример 2
              struct Point { int x, y };                       // Тут поступаем умнее, создаем структуру
              ...                                              // для хранения координат
    
              TX_SOCEKT game_server = txCreateSocket (...);    // Создаем сокет
              ...
    
              Point p = { 100, 200 };                          // Создаем точку с координатами x = 100, y = 200
    
              txSendTo (game_server, &p, sizeof (p));          // Передаем данные как структуру
int txRecvFrom ( TX_SOCKET to,
void *  buf,
int  size_buf 
)

Функция для приема данных через сокет

Cокет TXLib'a.

Аргументы:
toСокет, через с которого нужно принять данные.
bufБуфер, который в будет записан массив.
size_bufРазмер буфера.
Возвращает:
Код ошибки. Подробнее см. MSDN.
Пример 1
              TX_SOCEKT game_server = txCreateSocket (...);      // Создаем сокет
              ...
    
              int x = 0, y = 0;
              ...
    
              char coordinates[200] = "";                        // Создаем строку для параметров
    
              txRecvFrom (game_server, coordinates, 200);        // Принимаем координаты
              sscanf (coordinates, " x = %d , y = %d", &x, &y);  // Извлекаем координаты из полученной строки
                                                                 // (следи за каждым пробелом!).
Пример 2
              struct Point { int x, y };                       // Тут поступаем умнее, создаем структуру
              ...                                              // для хранения координат
    
              TX_SOCEKT game_client = txCreateSocket (...);    // Создаем сокет
              ...
    
              Point p = {};                                    // Создаем переменную для приема координат
              ...
    
              txRecvFrom (game_server, &p, sizeof (p));        // Принимаем данные
    
              DrawGameObject (p.x, p.y);                       // Используем данные
int txnAssert ( TX_SOCKET asr)

Функция для проверки сокета

Cокет TXLib'a.

Аргументы:
asrСокет, который нужно проверить.
Возвращает:
Код ошибки.
int txChangeSockType ( TX_SOCKET to,
sock_type  blocking 
)

Функция для изменения типа (синхронный - не синхронный) сокета.

Cокет TXLib'a.

Аргументы:
toСокет, тип которого нужно изменить.
blockingНовый тип блокировки сокета.
Возвращает:
Наличие ошибки.
SOCKET* txGetWinSocket ( TX_SOCKET what,
bool  main 
)

Функция, которая возвращает сокет winsock'а.

Cокет TXLib'a.

Аргументы:
whatСокет TXLib'a, сокет которого нужно вернуть.
mainЧасть сокета TXLib'a, короую нужно вернуть.
Возвращает:
Указатель на сокет winsock'a.