Главная | Соглашение | Публикация статей

Программа для обмена сообщениями между 2-мя рабочими станциями в сети NetWare
Категория: Статьи

Программу нужно запускать с ключом т.е. указать свое имя каким оно будет в сети, когда вы будете обмениваться сообщениями.

Например: Message.exe/ sergei

Текст программы:

typedef struct
{
unsigned char netadd[4];
unsigned char nodeadd[6];
unsigned short socket;
} IPXADDRESS;

typedef struct
{
unsigned short checksum;
unsigned short length;
unsigned char tc;
unsigned char type;
IPXADDRESS dest;
IPXADDRESS source;
} IPXHEADER;

typedef struct
{
void far *linkaddress;
void (far *esraddress)();
unsigned char inuse;
unsigned char cc;
unsigned short socket;
unsigned char workspace[16];
unsigned char immedaddr[6];
unsigned short fragcount;
void far *fragaddr1;
unsigned short fragsize1;
void far *fragaddr2;
unsigned short fragsize2;
} IPXECB;

#ifdef __cplusplus
extern "C" {
#endif

extern unsigned short reverseword ( unsigned short );
extern unsigned long ipxinit ( void );
extern unsigned long ipxentry;
extern void ipxgetaddress ( void * );

extern unsigned short ipxgetmaxpacketsize ( void );
extern unsigned short ipxgetretrycount ( void );
extern unsigned short ipxverifychecksum( IPXECB * );
extern unsigned char ipxopensocket ( unsigned char, unsigned short * );
extern void ipxclosesocket ( unsigned short );
extern unsigned char ipxlistenforpacket ( IPXECB * );
extern void ipxsendpacket ( IPXECB * );
extern void sendwithchecksum( IPXECB * );
extern void ipxrelenquishcontrol ( void );
#ifdef __cplusplus
}
#endif

ассемблер:

.model large
.data
public _ipxentry
_ipxentry dd 0

.code

public _reverseword
_reverseword:
push bp
mov bp,sp
mov ax,[bp+6]
xchg ah,al
pop bp
retf

public _ipxinit
_ipxinit:
push di
push es
mov ax,7A00h
int 2Fh
cmp al,0FFh
jnz _ipxinit0
mov word ptr [_ipxentry+0],di
mov word ptr [_ipxentry+2],es
_ipxinit0:
mov dx,word ptr [_ipxentry+2]
mov ax,word ptr [_ipxentry+0]
pop es
pop di
retf

public _ipxgetaddress
_ipxgetaddress:
push bp
mov bp,sp
mov bx,0009h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop bp
retf

public _ipxgetmaxpacketsize
_ipxgetmaxpacketsize:
mov bx,001Ah ;0d
call [_ipxentry]
retf

public _ipxgetretrycount
_ipxgetretrycount:
mov bx,001Ah
call [_ipxentry]
mov ax,cx
retf

public _ipxopensocket
_ipxopensocket:
push bp
mov bp,sp
push ds
mov al,[bp+6]
mov bx,[bp+8]
mov ds,[bp+10]
mov dx,[bx]
pop ds
mov bx,0000h
call [_ipxentry]
push ds
mov bx,[bp+8]
mov ds,[bp+10]
mov [bx],dx
mov ah,00h
pop ds
pop bp
retf

public _ipxclosesocket
_ipxclosesocket:
push bp
mov bp,sp
mov bx,0001h
mov dx,[bp+6]
call [_ipxentry]
pop bp
retf

public _ipxlistenforpacket
_ipxlistenforpacket:
push bp
mov bp,sp
push ds
push di
push si
push es
mov bx,0004h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
mov ah,00h
pop es
pop si
pop di
pop ds
pop bp
retf

public _ipxsendpacket
_ipxsendpacket:
push bp
mov bp,sp
push si
push es
mov bx,0003h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf

public _sendwithchecksum
_sendwithchecksum:
push bp
mov bp,sp
push si
push es
mov bx,0020h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf

public _ipxrelenquishcontrol
_ipxrelenquishcontrol:
mov bx,000Ah
call [_ipxentry]
retf

public _ipxverifychecksum
_ipxverifychecksum:
push bp
mov bp,sp
push si
push es
mov bx,0022h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf

end

С++

#include <stdio.h>
#include <bios.h>
#include <fcntl.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <mem.h>
#include "ipx.h"

int getkey(void);
void sent_buf(int msh,char *sbuffer);

unsigned int socket=0x5000;
#define NPACKETS 5 // количество окон приема/прослушивания
#define PACKETSIZE 200 // размер буфера сообщения

IPXECB recb[NPACKETS],secb[NPACKETS];
IPXHEADER rheader[NPACKETS],sheader[NPACKETS];
unsigned char rbuffer[NPACKETS][PACKETSIZE];
unsigned char sbuffer[NPACKETS][PACKETSIZE];
unsigned char M_ADDR[6];
char NAME_USER[30];
//------------------------------------------------------------------------------
void main ( int argc, char *argv[] )
{
char buf[100],mes[150];
unsigned short ra;
int Flag_exit,key,i;
IPXADDRESS myaddress;

clrscr();
if(argc<2)
{
printf("Ошибка задания параметров !\n\n");
printf("message.exe NAME_USER \n");
exit(1);
}
strcpy(NAME_USER,argv[1]);

if(!ipxinit()) { printf("IPX не найден !\n"); exit(1); }

if (ipxopensocket(0x00,&socket) == 0xff) { printf("Канал уже открыт !\n"); exit(1); }

printf("F1 - ввести сообщение. Esc - выход.\n\n\n");
ipxgetaddress(&myaddress);
for(i=0;i<6;i++) M_ADDR[i]=myaddress.nodeadd[i];

// инициализируем окна прослушивания
for(ra=0;ra<NPACKETS;ra++)
{
recb[ra].socket=socket;
recb[ra].esraddress=NULL;
recb[ra].fragcount=2;
recb[ra].fragaddr1=&rheader[ra];
recb[ra].fragsize1=sizeof(IPXHEADER);
recb[ra].fragaddr2=&rbuffer[ra];
recb[ra].fragsize2=PACKETSIZE;
ipxlistenforpacket(&recb[ra]);
}

Flag_exit=0;
while(!Flag_exit)
{
if( kbhit() ) // нажата клавиша
{
key=getkey();
switch(key)
{
case 27: // Esc
Flag_exit=1;
break;
case 315: // F1
textcolor(7);
printf("-> ");gets(buf); printf("\n");
sprintf(mes,"%s: %s",NAME_USER,buf);
for(ra=0;ra<NPACKETS;ra++)
{
if(!secb[ra].inuse )
{ sent_buf(ra,mes); break; }
}
break;
}
}

for(ra=0;ra<NPACKETS;ra++)
{
if(!recb[ra].inuse) // приемные окна
{
if(memcmp(rheader[ra].source.nodeadd,M_ADDR,6))
{
textcolor(3);
cprintf("%s\n\r",rbuffer[ra]);
}
memset(rbuffer[ra],0,PACKETSIZE);
recb[ra].socket=socket;
recb[ra].esraddress=NULL;
recb[ra].fragcount=2;
recb[ra].fragaddr1=&rheader[ra];
recb[ra].fragsize1=sizeof(IPXHEADER);
recb[ra].fragaddr2=&rbuffer[ra];
recb[ra].fragsize2=PACKETSIZE;
ipxlistenforpacket(&recb[ra]);
}//if(!recb[ra].inuse)
}//for(<NPACKETS)

}

ipxclosesocket(socket);
}

//----------------------------------
void sent_buf(int msh,char *buf)
{
int i;

memset(sbuffer[msh],0,PACKETSIZE);
sprintf(sbuffer[msh],"%s",buf);

for(i=0;i<6;i++) sheader[msh].source.nodeadd[i]=M_ADDR[i];
for(i=0;i<4;i++) sheader[msh].source.netadd[i]=0x9;

for(i=0;i<4;i++) sheader[msh].dest.netadd[i]=0x09;
for(i=0;i<6;i++) sheader[msh].dest.nodeadd[i]=0xff;//M_ADDR[i];
for(i=0;i<6;i++) secb[msh].immedaddr[i]=0xff;//M_ADDR[i];
sheader[msh].dest.socket=socket;
sheader[msh].type=4;
secb[msh].socket=socket;
secb[msh].esraddress=NULL;
secb[msh].fragcount=2;
secb[msh].fragaddr1=&sheader[msh];
secb[msh].fragsize1=sizeof(IPXHEADER);
secb[msh].fragaddr2=&sbuffer[msh];
secb[msh].fragsize2=PACKETSIZE;
ipxsendpacket(&secb[msh]);
}

//-----------------------------------------------------------
int getkey(void)
{
int key, lo, hi;

key = bioskey(0);
lo = key & 0X00FF;
hi = (key & 0XFF00) >> 8;
return(lo ? lo : hi + 256);
}

Программа проверена и работает нориально.

Программа для обмена сообщениями между 2-мя рабочими станциями в сети NetWare

Статьи по теме:

Рынок электронной коммерции: сегодня и завтра
Soa-Платформа Ijanet Бесплатно
Управление процессами
КОМПЬЮТЕРНАЯ ИНФОРМАЦИЯ КАК ОБЪЕКТ ПРЕСТУПНОГО ПОСЯГАТЕЛЬСТВА
Кибернетика – наука ХХ века
ЭВМ И ИНТЕЛЛЕКТ
Математические модели
Устройства вывода
Трехмерная графика
Соединение микропроцессоров
Пользователи Internet в России
ПРИНЦИП ПОСТРОЕНИЯ КОМПЬЮТЕРНЫХ СЕТЕЙ
Аналоговые и цифровые схемы
Блокнот: Ведение журнала работы
WordPad: Создание маркированных списков
Обзор возможностей WinRAR 3.70 RU Final
Организация объектов сети
Геоинформационные Системы (Гис) Как Средства Сбора И Анализа Геоданных
Общие признаки преступлений в сфере компьютерной информации
Функции BIOS для работы с дисками
Designer/2000 + Developer/2000
Открытие документа из Главного меню
О компьютерах
Защита вновь создаваемых программ
Экспортные законы
Поддержка драйвера сжатых дисков в MS DOS
Crm, Создание Программного Обеспечения
Передача файлов (ftp)
Универсальный мультисенсор SVEA совмещает в себе датчик освещенности и присутствия
Государственное регулирование информатизации Украины
Время создавать защиту
Понятие окон в WINDOWS. Типы окон. Элементы окон
Обслуживание Компьютеров В Рамках Ит Аутсорсинга
Монтаж фильма
Эрг-упражнения для улучшения осанки
течественное законодательство в борьбе с компьютерными преступлениями
Он обжуливает?
Internet
HotMail своими руками, или Что может PH
Разработка Баз Данных На Msde 2000, Работа С Бесплатной Базой Данных Mssql
Устройство Netping Cooler Board Поступило На Склад Компании Зао «Лайт Коммуникейшн»
СОСТАВ САПР
Компьютеры на страже закона
Нарушение правил эксплуатации ЭВМ, системы ЭВМ или их сети (ст. 274 УК)
Оборотная сторона медали Spyware
Почему чистка регистратуры Windows необходимая
Персональный компьютер
Геометрические объекты в GEOSTAR
Аналого-цифровые вычислительные машины (АЦВМ)
Региональная Система Имен
"ТРОЯНСКИЙ КОНЬ"
СПЕЦИФИКА ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ САПР
Файлы
Подсистема оборудования
Структура функционирования сети