- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Помогите пожалуйста передать простые числа на сервер. Помещаю число в буфер
strcpy(TxBuffer,chislo); у клиента , а на сервере это число выводится искаженно.
исходник клиента:
/************************************************************/
/* Файл IPXCLIEN.C */
/************************************************************/
#include "ipx"
#define BUFFER_SIZE 512 /* Макс. размер буфера данных */
#include <stdio.h>
#include <string.h>
struct ECB RxECB, TxECB;
struct IPX_HEADER RxHEADER, TxHEADER;
main (void)
{
int j,i;
char ch1;
unsigned char chislo=20; /* передаваемое число */
unsigned char int1=55;
/* unsigned char fgh[10];
strcpy(fgh,"privet"); */
clock_t tim1,tim2,tim3; /* Фиксаторы системного времени */
/* Используем сокет 0x4545 (диапазон сокетов 4000h-8000h) */
unsigned socket_client = 0x4343;
unsigned socket_serv = 0x4545;
/* ECB для приема и передачи пакетов */
extern struct ECB RxECB, TxECB;
/* Заголовки принимаемых и передаваемых пакетов */
extern struct IPX_HEADER RxHEADER, TxHEADER;
/* Буферы для принимаемых и передаваемых пакетов */
unsigned char RxBuffer;
unsigned char TxBuffer;
printf("\n * К л и е н т IPX *\n");
/* Есть ли IPX и SPX ? */
i=ipx_spx_API();
if (i==1) printf("\n IPX и SPX найдены, ");
else
{
if (i==0) printf("\nIPX найден, а SPX не найден ");
else {printf("\nIPX и SPX не найдены "); exit(-1);};
};
/* Откроем сокет. Его используем сначала для передачи, */
/* а потом для приема пакета */
if (open_socket (socket_client) !=0)
{printf ("\nОшибка при открытии сокета"); close_socket (socket_client);exit(-1);};
printf ("сокет клиента %x открыт",_DX);
/* Подготовим TxECB для передачи пакета */
memset(&TxECB, 0, sizeof(TxECB));
TxECB.socket = int_swap(socket_client); /* можно ...=4545; */
TxECB.fragment_count = 2;
TxECB.packet[0].address = &TxHEADER;
TxECB.packet[0].size = sizeof(TxHEADER);
TxECB.packet[1].address = TxBuffer;
TxECB.packet[1].size = BUFFER_SIZE;
/* Пакет предназначен всем станциям данной сети */
memset(TxECB.immediate_address, 0xff, 6);
/* Подготовим заголовок пакета */
TxHEADER.packet_type = 4;
memset(TxHEADER.dest_network_number, 0, 4);
memset(TxHEADER.dest_network_node, 0xff, 6);
TxHEADER.dest_network_socket = int_swap(socket_serv);
/* Подготовим данные, которые будем передавать */
strcpy(TxBuffer,chislo);
printf(" \n\n Передать пакет \"широковещательно\" сразу ? <Y,N>\n");
printf(" Примечание: 1 - При 'N' можно просмотреть структуры HEADER и ECB, \n а затем передать пакет.\n ");
printf(" 2 - Сервер должен ОЖИДАТЬ приема пакета.");
ch1=getch(); if(ch1!='y'&&ch1!='Y') view_struct();
/* Передаем пакет всем станциям сети для определения адреса сервера */
tim1=clock();
ipx_send_packet(&TxECB);
do
{ printf(" \n\n Передать пакет еще раз ? <Y,N>\n");
ch1=getch(); if(ch1=='y'||ch1=='Y') ipx_send_packet(&TxECB);
}
while(ch1=='y'|| ch1=='Y');
/* Закроем сокет */
close_socket (socket_client);
exit(0);
}
Исходник сервера:
/************************************************************/
/* Файл IPXSERV.C */
/************************************************************/
#include "ipx"
#define BUFFER_SIZE 512
#include <stdio.h>
#include <string.h>
struct IPX_HEADER RxHEADER, TxHEADER;
struct ECB RxECB,TxECB;
main (void)
{
int i,j,rr; /* Рабочая переменная */
char ch1; /* Рабочая переменная */
clock_t tim1, tim2,tim3; /* Фиксаторы системного времени */
/* Используем сокет 0x4545 (диапазон сокетов 4000h-8000h) */
unsigned socket_serv=0x4545;
unsigned socket_client=0x4343;
/* Этот ECB будет использован и для приема и для передачи */
extern struct ECB RxECB;
/* Заголовки принимаемых и передаваемых пакетов */
extern struct IPX_HEADER RxHEADER, TxHEADER;
/* Буферы для принимаемых и передаваемых пакетов */
unsigned char RxBuffer;
unsigned TxBuffer;
printf("\n * С е р в е р IPX *\n");
/* Есть ли IPX и SPX ? */
i=ipx_spx_API();
if (i==1) printf("\n IPX и SPX найдены, ");
else
{
if (i==0) printf("\nIPX найден, а SPX не найден ");
else {printf("\nIPX и SPX не найдены "); exit(-1);};
};
/* Откроем сокет. Его используем сначала для приема, */
/* а потом для передачи пакета */
if (open_socket (socket_serv) !=0)
{printf ("\nОшибка при открытии сокета");close_socket (socket_serv); exit(-1);};
printf ("сокет сервера %x открыт",_DX);
/* Подготовим RxESB для приема пакета */
memset(&RxECB, 0, sizeof(RxECB));
RxECB.socket = int_swap(socket_serv); /* можно ...=4545; */
RxECB.fragment_count = 2;
RxECB.packet[0].address = &RxHEADER;
RxECB.packet[0].size = sizeof(RxHEADER);
RxECB.packet[1].address = RxBuffer;
RxECB.packet[1].size = BUFFER_SIZE;
printf("\n\n ОЖИДАНИЕ запроса от клиента... \n");
printf("Для ОТМЕНЫ ожидания и просмотра структур HEADER и ECB нажмите на любую клавишу \n");
tim1=clock(); /* Засекаем время начала ожидания */
ipx_listen_for_packet(&RxECB); /* Начинаем "слушать" пакет */
/* Ожидаем приема пакета от клиента */
while(RxECB.in_use)
{ ipx_relinquish_control();
if(kbhit()) { getch(); view_struct(); RxECB.completion_code=0xfe; break;}
}
tim2=clock(); /* Фиксируем время конца ожидания */
if(RxECB.completion_code == 0)
{
printf("\n ПРИНЯТ запрос от клиента %s \n", RxBuffer); /* здесь должно выводится число*/
printf(" Время ожидания приема: %d ", timer(tim1, tim2));
print_time(tim1, tim2);
printf( "\n ---- Для продолжения нажмите на любую клавишу ----");
getch();
/* Теперь подготавливаем ECB для передачи пакета. */
/* Поле immediate_address не заполняем так там уже находится */
/* адрес станции клиента. Это произошло потому, что только что */
/* был принят пакет данных от клиента и поэтому в ECB устано- */
/* вился непосредственный адрес станции, которая отправила пакет */
RxECB.socket = int_swap(socket_serv); /* можно ...=4545; */
RxECB.fragment_count = 2;
RxECB.packet[0].address = &TxHEADER;
RxECB.packet[0].size = sizeof(TxHEADER);
RxECB.packet[1].address = TxBuffer;
RxECB.packet[1].size = BUFFER_SIZE;
/* Подготовим заголовок пакета */
TxHEADER.packet_type = 4;
memset(TxHEADER.dest_network_number, 0, 4);
memcpy(TxHEADER.dest_network_node, RxECB.immediate_address, 6);
TxHEADER.dest_network_socket = int_swap(socket_client); /* можно =4343;*/
do
{ printf(" \n Передать пакет клиенту еще раз ? <Y,N>\n");
ch1=getch(); if(ch1=='y'||ch1=='Y') ipx_send_packet(&RxECB);
}
while (ch1=='y'||ch1=='Y');
printf(" \n Нужен просмотр структур ? <Y,N>\n");
ch1=getch(); if(ch1=='y'||ch1=='Y') view_struct();
/* Закроем сокет */
close_socket (socket_serv);
exit(0);
}
подключаемый файл ipx
/****************************************************************/
/* файл ipxh.h */
/****************************************************************/
/* Заголовок пакета */
struct IPX_HEADER
{
unsigned int checksum;
unsigned int lenght;
unsigned char transport_control;
unsigned char packet_type;
unsigned char dest_network_number [4];
unsigned char dest_network_node [6];
unsigned int dest_network_socket;
unsigned char source_network_number [4];
unsigned char source_network_node [6];
unsigned int source_network_socket;
};
/* Управляющий блок с двумя фрагментами данных */
struct ECB
{
void far *link_address;
void far (*event_servise_routine)(void); /* ESR address */
unsigned char in_use; /* флаг состояния ESB */
unsigned char completion_code; /* код завершения */
unsigned int socket;
unsigned char IPX_workspase[4];
unsigned char driver_workspase[12];
unsigned char immediate_address[6]; /*непосредственный адрес*/
unsigned int fragment_count; /*кол.фрагментов пакета*/
struct {
void far *address; /* Пакет будет состоять из 2-х фраг- */
unsigned int size; /* ментов:заголовка и данных */
} packet [2];
};
struct NET_ADDRESS
{
unsigned char network[4];
unsigned char node[6];
unsigned char socket[2];
};
int ipx_spx_API (void); /* API - Application Programm Interface */
void get_internet_address();
maloi86,
1. странна тема для этого раздела форума.
2. у вас как настроен IPX на машинах, как независимый интерфейс или IPXoverTCP
Я его подключил в свойствах локального подключения(ОС XP) как не зависимый протокол IPX/SPX/NetBIOS/
когда в буфер TxBuffer помещаю символы или числа strcpy(TxBuffer,"Privet"); то они пер
едаются без искажений. а когда передаю в буфер с помощью переменной strcpy(TxBuffer,chislo);
то идет искажение
то идет искажение
это не искажение. Скорее всего число передается в том виде, как оно хранится в памяти, поэтому и беда...
передавайте число как текст, а на приемнике из текста опять получайте число
это не искажение. Скорее всего число передается в том виде, как оно хранится в памяти, поэтому и беда...
передавайте число как текст, а на приемнике из текста опять получайте число
Это то все хорошо просто над полученным числом на сервере нужно будет делать матматические операции.
Это то все хорошо просто над полученным числом на сервере нужно будет делать матматические операц
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/