Создание сетевой игры - Коммуникации, связь, цифровые приборы и радиоэлектроника курсовая работа

Создание сетевой игры - Коммуникации, связь, цифровые приборы и радиоэлектроника курсовая работа



































Создание сетевой игры "Кости". Протоколы, используемые в сетевой игре: IPX предоставляет возможность программам обмениваться пакетами данных без подтверждения; протоколы SPX и NETBIOS сделаны на базе IPX и поэтому требуют дополнительных ресурсов.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Южно-Уральский Государственный Университет
Создание сетевой игры «Кости». Игра ведется до 21 очка, работа сделанна на 5 протоколах.
Протокол IPX предоставляет возможность программам, запущенным на рабочих станциях, обмениваться пакетами данных без подтверждения. В сети Novell NetWare наиболее быстрая передача данных при наиболее экономном использовании памяти реализуется именно протоколом IPX. Протоколы SPX и NETBIOS сделаны на базе IPX и поэтому требуют дополнительных ресурсов.
Формат передаваемых по сети пакетов представлен на рис. 2.
Пакет можно разделить на две части - заголовок и передаваемые данные. Все поля, представленные на рис. 2, кроме последнего (Data), представляют собой заголовок пакета. Заголовок пакета выполняет ту же роль, что и конверт обычного письма - там располагается адрес назначения, обратный адрес и некоторая служебная информация.
Особенностью формата пакета является то, что все поля заголовка содержат значения в перевернутом формате, т. е. по младшему адресу записывается старший байт данных, а не младший, как это принято в процессорах фирмы Intel. Поэтому перед записью значений в многобайтовые поля заголовка необходимо выполнить соответствующее преобразование. Представление данных в заголовке пакета соответствует, например, формату целых числел в компьютере IBM-370 (серия ЕС ЭВМ). .
Первое, что должна сделать программа, желающая работать в сети с протоколом IPX или SPX, - проверить, установлен ли драйвер соответствующего протокола. Затем необходимо получить адрес вызова этого драйвера - точку входа API (Application Programm Interface - интерфейс для приложений). В дальнейшем программа вызывает драйвер при помощи команды межсегментного вызова процедуры по адресу точки входа API драйвера IPX/SPX.
Обычно в сети одна из рабочих станций принимает запросы на выполнение каких-либо действий от других рабочих станций. Так как станция обслуживает запросы, она называется сервером (serve - обслуживать, server - обслуживающее устройство). Выполнив запрос, сервер посылает ответ в запросившую станцию, которая называется клиентом.
В сети может быть много серверов и много клиентов. Одни и те же клиенты могут посылать запросы разным серверам.
Говоря более строго, сервером или клиентом является не рабочая станция, а запущенная на ней программа. В мультизадачной среде разные программы, запущенные одновременно на одной и той же рабочей станции могут являться и клиентами, и серверами.
Программа-сервер, выполнив очередной запрос, переходит в состояние ожидания. Она ждет прихода пакета данных от программы-клиента. В зависимости от содержимого этого пакета программа-сервер может выполнять различные действия, в соответствии с логикой работы программы. Например, она может принять от программы-клиента дополнительные пакеты данных или передать свои пакеты.
Сервер и клиент при необходимости на какое-то время или навсегда могут поменяться местами, изменив свое назначение на противоположное.
Для того, чтобы создавать программы-серверы и программы-клиенты, нам необходимо научиться выполнять две задачи:
Для инициализации программ сервера и клиента, работающих на базе IPX, недостаточно убедиться в наличии соответствующего драйвера и получить точку входа в его API. Необходимо выполнить некоторые подготовительные действия для того, чтобы программа могла принимать и передавать пакеты данных. Прежде всего необходимо, чтобы программа-сервер или программа-клиент идентифицировали себя в сети при помощи механизма сокетов. Динамически распределяемые сокеты выдаются программам как бы во временное пользование (на время их работы) по специальному запросу. Перед началом работы программа должна запросить сокет у протокола IPX, а перед завершением - освободить его. При реализации схемы обмена данными "клиент-сервер" сервер обычно принимает пакеты на сокете, значение которого известно программам-клиентам. Сами же программы-клиенты могут использовать либо то же самое значение сокета, либо получать свой сокет динамически. Клиент может сообщить серверу свой сокет просто передав его в пакете данных (так как мы предполагаем, что сокет сервера известен программе-клиенту). После определения сокета необходимо узнать сетевой адрес станций-получателей. Для того чтобы клиент мог послать запрос серверу, необходимо кроме сокета сервера знать его сетевой адрес - номер сети и адрес рабочей станции в сети.
Source Port и Destination Port - это адреса процессов (отправителя и получателя соответственно). Грубо говоря, это просто числовые идентификаторы, которые присвоены процессам-протоколам верхнего уровня. Некоторые протоколы верхнего уровня имеют стандартные значения номеров портов:
Sequence Number - порядковый номер первого октета сегмента в потоке данных.
Acknowledgement Number - количество полученных октетов данных
Window - сколько октетов адресат готов принять
Flags - управляющие флаги, используемые для установки и разрыва связи, для подтверждения получения данных, для передачи экстренных данных.
Checksum - контрольная сумма: все байты заголовка суммируются отправителем и результат помещается в это поле. По получению адресат также суммирует все байты заголовка и сравнивает с этим числом. Если значения равны, значит, все в порядке.
Urgent Point - определяет положение экстренных данных внутри сегмента.
Канал - средство обмена информацией между процессами с одновременной синхронизацией, реализующей дисциплину FIFO (первый вошел - первый вышел), то есть прочитанные сообщения удаляются.
Канал - файл специального типа, особенности:
время существования канала ограниченно временем работы процесса
размер канала ограничен количеством блоков, доступных для прямой адресации (то есть на диске он не создается, а существует только в буферах ввода-вывода).
Используется только для общения между родственными процессами (поскольку родственники наследуют все открытые файлы предка).
fd[1] - дескриптор файла для вывода
Но файловый дескриптор - локальная для процесса характеристика, как могут два разных процесса использовать один файловый дескриптор? Для этого должна возникнуть такая ситуация
А это возможно только в том случае, если ПР1 и ПР2 являются родственниками - ведь потомок полностью наследует u-area предка, в том числе и таблицу файловых дескрипторов. Значит, либо ПР1 должен быть потомком ПР2, либо наоборот, либо они оба должны быть потомками третьего процесса
Протокол NetBios работает на трех уровнях семиуровневой модели OSI: сетевом уровне, транспортном уровне и на уровне каналов связи. Уровень каналов связи обеспечивает механизм обмена сообщениями между программами, работающими на станциях в рамках канала связи или сессии. NETBIOS может обеспечить интерфейс более высокого уровня, чем протоколы IPX и SPX.
Протокол NETBIOS поддерживается в сетях IBM (IBM PC LAN), Novell NetWare, Microsoft Windows for Workgroups и в других сетях. К сожалению, нет единого стандарта на протокол NETBIOS, поэтому в сетевом программном обеспечении разных фирм используются разные интерфейсы для вызова команд NETBIOS.
С нашей точки зрения, наибольший интерес представляет применение NETBIOS в сетях Novell NetWare и Microsoft Windows for Workgroups. Мы рассмотрим основные возможности NETBIOS, связанные с передачей данных между рабочими станциями в пределах одного логического сегмента сети. Использовать NETBIOS проще, чем IPX или SPX. Однако, так как в среде Novell NetWare нужен специальный эмулятор NETBIOS, эффективность работы программы может снизиться. Кроме того, для эмулятора нужна дополнительная память, так как он реализован в виде резидентной программы.
Для идентификации рабочей станции протоколы IPX и SPX используют номер сети, адрес станции в сети и сокет. Адрес станции определяется на аппаратном уровне и представляет собой число длиной 6 байт. Номер сети занимает 4 байта. Сокеты выделяются динамически драйвером протокола IPX или могут быть получены в Novell.
Протокол NETBIOS использует другой механизм адресации станций и программ. Для адресации станции используются имена размером 16 байт. Каждая станция имеет одно постоянное имя (permanent name), которое образуется из аппаратного адреса добавлением к нему слева десяти нулевых байт. Кроме постоянного имени протокол NETBIOS позволяет добавлять (и удалять) обычные имена и групповые имена . Обычные имена служат для идентификации рабочей станции, групповые могут служить для посылки пакетов одновременно нескольким станциям в сети. Постоянное имя удалить нельзя, так как оно полностью определяется аппаратным обеспечением станции.
При добавлении обычного имени протокол NETBIOS опрашивает всю сеть для проверки уникальности имени. Групповое имя может быть одинаковое на нескольких станциях, поэтому при добавлении группового имени опрос сети не выполняется.
После добавления нового имени этому имени присваивается так называемый номер имени (name number), который используется для передачи данных по сети.
Сравнивая методы адресации, используемые протоколами IPX/SPX и NETBIOS, нетрудно заметить, что метод адресации протокола NETBIOS более удобен. Вы можете адресовать данные не только одной станции (как в IPX и SPX) или всем станциям сразу (как в IPX), но и группам станций, имеющим одинаковое групповое имя. Это может быть удобно, если в сети работают несколько групп пользователей, которые интенсивно обмениваются данными между собой.
Другим преимуществом схемы адресации протокола NETBIOS перед схемой адресации протоколов IPX/SPX можно считать отсутствие необходимости получать в фирме Novell свой собственный номер сокета для идентификации вашего программного обеспечения. Вы можете придумать свое собственное уникальное групповое имя, включающее, например, название программы и вашей фирмы, и использовать его для работы по схеме клиент-сервер.
//---------------------------------------------------------------------------
#pragma link "LMDCustomParentPanel"
#pragma link "LMDBaseGraphicControl"
#pragma link "LMDCustomSimpleLabel"
#pragma link "LMDBaseGraphicButton"
#pragma link "LMDCustomShapeButton"
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormActivate(TObject *Sender)
//---------------------------------------------------------------------------
void __fastcall TMainForm::menuBeginClick(TObject *Sender)
if (UstanParametrov()) //вызов 2-х форм для установки параметров
if(IsServer) lbStat->Caption="Ожидается соединение с клиентом...";
//---------------------------------------------------------------------------
bool __fastcall TMainForm::UstanParametrov(void)
void __fastcall TMainForm::OtobrazhDannihSopernika(int *MasPriem)
Graphics::TBitmap *Bitmap2 = new Graphics::TBitmap();
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[6])+strCat);
Kubiki2[1]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[6])+strCat);
Kubiki2[1]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[9])+strCat);
Kubiki2[2]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[6])+strCat);
Kubiki2[1]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[9])+strCat);
Kubiki2[2]->Picture->Bitmap=Bitmap2;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[12])+strCat);
Kubiki2[3]->Picture->Bitmap=Bitmap2;
lbHisWholeOch->Caption=IntToStr(MasPriem[2]);
//-----------пришли данные соперника--------------------------------------------
void __fastcall TMainForm::Priem(int *MasPriem)
if(MasPriem[0]==0) //первый ответ сервера клиенту
mess="Ваш соперник выбрал следующие параметры игры:\nКоличество кубиков: "+IntToStr(MasPriem[1])+"\nМаксимальное количество очков: "+IntToStr(MasPriem[2]);
Application->MessageBoxA(mess.c_str(),"Параметры игры",MB_OK);
else if (MasPriem[0]==1) //соперник бросил
shapeBrosil->Brush->Color=0x0000CE00;
enum TypeDannihForTabl DannieForTabl;
if(IsYaFixed && HisWholeOch>MyWholeOch && HisWholeOch<=MaxOch)
else if(IsYaFixed && HisWholeOch<=MyWholeOch)
else if (MasPriem[0]==2) //соперник зафиксировал
shapeFixed->Brush->Color=0x000000CE;
enum TypeDannihForTabl DannieForTabl;
if(IsYaFixed && MyWholeOch==HisWholeOch)
else if (MasPriem[0]==3) //соперник разорвал соединение
Application->MessageBoxA("Ваш соперник разорвал соединение.\nИгра окончена.","Разрыв соединения",MB_OK);
//----------------процедура заполнения таблицы----------------------------------
void __fastcall TMainForm::ZapolnTabl(enum TypeDannihForTabl DannieForTabl)
listboxOchki->Items->Add(" "+IntToStr(NomHoda)+"; "+IntToStr(MyCurOch));
listboxOchki->Items->Add(" "+IntToStr(NomHoda)+"; 0");
listboxOchki->SetItemPart(NomHoda-1,2," "+IntToStr(MasPriem[1]));
listboxOchki->SetItemPart(NomHoda-1,2," 0");
listboxOchki->SetItemPart(NomHoda-1,1," "+IntToStr(MyCurOch));
listboxOchki->SetItemPart(NomHoda-1,1," 0");
listboxOchki->Items->Add(" "+ IntToStr(NomHoda)+";; "+IntToStr(MasPriem[1]));
listboxOchki->Items->Add(" "+ IntToStr(NomHoda)+";; 0");
//------------------------------Результаты--------------------------------------
void __fastcall TMainForm::ViProigrali(void)
Application->MessageBoxA("Вы проиграли!\nИграем дальше!","Поражение",MB_OK+MB_ICONEXCLAMATION);
//---------------------------------
void __fastcall TMainForm::ViViigrali(void)
Application->MessageBoxA("Вы выиграли!\nИграем дальше!","Победа!!",MB_OK+MB_ICONEXCLAMATION);
//----------------------------------
void __fastcall TMainForm::Nichia(void)
Application->MessageBoxA("Вы сыграли вничью!\nИграем дальше!","Ничья",MB_OK+MB_ICONEXCLAMATION);
//----------------------------------------------------------------------------
void __fastcall TMainForm::menuOProgrClick(TObject *Sender)
//----------------------------Интерфейсы---------------------------------------
void __fastcall TMainForm::InterfaceBezIgri(void)
shapeBrosil->Brush->Color=clSilver;
shapeBrosil->Caption->Font->Color=clWhite;
shapeFixed->Caption->Font->Color=clWhite;
AnsiString tmp=AnsiQuotedStr("Игра->Начать новую игру",'"');
lbStat->Caption="Для начала новой игры выберете пункт меню "+tmp;
//--------------------------------------------------------------
void __fastcall TMainForm::InterfaceBeginNewGame(void)
lbKolKub->Caption=IntToStr(KolKub);
lbMaxOch->Caption=IntToStr(MaxOch);
lbMaxOch2->Caption=IntToStr(MaxOch);
//---------------------------------------------------------
void __fastcall TMainForm::ChangeInterfacePerehodHoda(bool HozhuYa)
shapeBrosil->Caption->Font->Color=clWhite;
shapeFixed->Caption->Font->Color=clWhite;
Application->MessageBoxA("Единственно верный вариант для Вас сейчас - зафиксировать очки!","Предупреждение",MB_OK+MB_ICONEXCLAMATION);
shapeBrosil->Brush->Color=clSilver;
shapeBrosil->Caption->Font->Color=clBlack;
shapeFixed->Caption->Font->Color=clBlack;
lbStat->Caption="Ход соперника...";
//--------------------------------------------------------------------------
void __fastcall TMainForm::InterfaceIgraemDalshe(void)
lbNomPartia->Caption="Партия № "+IntToStr(NomPartia);
lbSchetPoPartiam->Caption=IntToStr(MyWinPoPartiam)+" : "+IntToStr(HisWinPoPartiam);
lbHisWholeOch->Font->Color=clGreen;
shapeBrosil->Brush->Color=clSilver;
//-----------------------Завершение игры---------------------------------------
void __fastcall TMainForm::menuStopClick(TObject *Sender)
if(Application->MessageBoxA("Вы действительно хотите завершить игру?","Завершение игры",MB_YESNO)==IDYES)
//---------------------------------------------------------------------------
void __fastcall TMainForm::menuQuitClick(TObject *Sender)
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
//-------------------служебные функции преобразования типов---------------------
char* __fastcall TMainForm::DannieToChar(int Type, int MyCurOch, int MyWholeOch,
AnsiString strTmp=IntToStr(Type)+";"+IntToStr(MyCurOch)+";"+IntToStr(MyWholeOch)+";"+
IntToStr(ZnachKub1)+";"+IntToStr(XKub1)+";"+IntToStr(YKub1)+";"+
IntToStr(ZnachKub2)+";"+IntToStr(XKub2)+";"+IntToStr(YKub2)+";"+
IntToStr(ZnachKub3)+";"+IntToStr(XKub3)+";"+IntToStr(YKub3)+";"+
IntToStr(ZnachKub4)+";"+IntToStr(XKub4)+";"+IntToStr(YKub4)+";";
//---------------------------------------------------------------------------
int* __fastcall TMainForm::CharToMas(char* charPriem)
for(int i=1;i<=strPriem.Length();i++)
MasPriem[y++]=StrToInt(MidStr(strPriem,PrevDelim+1,i-PrevDelim-1));
//Бросить---------------------------------------------------------------------------
//Закогнчить--------------------------------------------------------------------------
void __fastcall TMainForm::btBrosit2Click(TObject *Sender)
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub)+strCat);
Kubiki1[0]->Picture->Bitmap=Bitmap1;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub, XKub, YKub));
int ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub1)+strCat);
Kubiki1[0]->Picture->Bitmap=Bitmap1;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub2)+strCat);
Kubiki1[1]->Picture->Bitmap=Bitmap1;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2));
int ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2, ZnachKub3, XKub3, YKub3;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub1)+strCat);
Kubiki1[0]->Picture->Bitmap=Bitmap1;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub2)+strCat);
Kubiki1[1]->Picture->Bitmap=Bitmap1;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub3)+strCat);
Kubiki1[2]->Picture->Bitmap=Bitmap1;
MyCurOch=ZnachKub1+ZnachKub2+ZnachKub3;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2, ZnachKub3, XKub3, YKub3));
int ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2, ZnachKub3, XKub3, YKub3, ZnachKub4, XKub4, YKub4;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub1)+strCat);
Kubiki1[0]->Picture->Bitmap=Bitmap1;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub2)+strCat);
Kubiki1[1]->Picture->Bitmap=Bitmap1;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub3)+strCat);
Kubiki1[2]->Picture->Bitmap=Bitmap1;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub4)+strCat);
Kubiki1[3]->Picture->Bitmap=Bitmap1;
MyCurOch=ZnachKub1+ZnachKub2+ZnachKub3+ZnachKub4;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2,ZnachKub3, XKub3, YKub3, ZnachKub4, XKub4, YKub4));
enum TypeDannihForTabl DannieForTabl;
else if(IsHeFixed && MyWholeOch>HisWholeOch && MyWholeOch<=MaxOch)
else if(IsHeFixed && MyWholeOch<=HisWholeOch)
//---------------------------------------------------------------------------
void __fastcall TMainForm::btFix2Click(TObject *Sender)
enum TypeDannihForTabl DannieForTabl;
if(IsHeFixed && MyWholeOch==HisWholeOch)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//-----------------------Подключение--------------------------------------------
void __fastcall TMainForm::IPXConnect(void)
rc = WSAStartup(MAKEWORD(2,0), &WSAData);
Application->MessageBox("Ошибка инициализации WSAStartup","Ошибка",MB_OK+MB_ICONHAND);
IPXSocket = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX);
Application->MessageBox("Протокол IPX не установлен","Ошибка",MB_OK+MB_ICONHAND);
memset(&OurAddress, 0, sizeof(OurAddress));
OurAddress.sa_socket = htons((unsigned short)(IPX_SERVER_SOCKET));
OurAddress.sa_socket = htons((unsigned short)(IPX_CLIENT_SOCKET));
if (bind(IPXSocket, (LPSOCKADDR)&OurAddress, sizeof(sockaddr_ipx)) == SOCKET_ERROR)
Application->MessageBox("Адресная ошибка IPX","Ошибка",MB_OK+MB_ICONHAND);
rc = setsockopt(IPXSocket, SOL_SOCKET, SO_BROADCAST, (char *)&OptVal, sizeof(OptVal));
Application->MessageBox("Ошибка setsockopt","Ошибка",MB_OK+MB_ICONHAND);
memset(&CallAddress, 0, sizeof(CallAddress));
CallAddress.sa_socket = htons(IPX_SERVER_SOCKET);
rc = sendto(IPXSocket, "connect", 8, 0, (PSOCKADDR)&CallAddress, sizeof(SOCKADDR));
Application->MessageBox("Ошибка sendto IPX","Ошибка",MB_OK+MB_ICONHAND);
rc = WSAAsyncSelect(IPXSocket, Handle, WSA_NETEVENT, FD_READ);
Application->MessageBox("Ошибка WSAAsyncSelect","Ошибка",MB_OK+MB_ICONHAND);
//------------------------------прием---------------------------------------
void __fastcall TMainForm::IPXWndProc(Messages::TMessage &Message)
rc = recvfrom((SOCKET)Message.WParam, Buf, sizeof(Buf)-1, 0, (PSOCKADDR)&CallAddress, &l);
Application->MessageBox("Ошибка recvfrom IPX","Ошибка",MB_OK+MB_ICONHAND);
char *strPered=DannieToChar(0,KolKub,MaxOch);
//-------------------------отправка---------------------------------------------
void __fastcall TMainForm::IPXSend (char* Buf)
rc = sendto(IPXSocket, Buf, strlen(Buf)+1, 0, (PSOCKADDR)&CallAddress, sizeof(SOCKADDR));
Application->MessageBox("Ошибка sendto IPX","Ошибка",MB_OK+MB_ICONHAND);
//-------------------------разрыв---------------------------------------------
void __fastcall TMainForm::IPXCloseConnection(void)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//----------Подключение---------------------------------------------------
void __fastcall TMainForm::TCPIPConnect(void)
ClientSocket1->Host=ServerHostName;
//---------Accept---------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1Accept(TObject *Sender,
char *strPered=DannieToChar(0,KolKub,MaxOch);
//----------Отправка------------------------------------------------------------
void __fastcall TMainForm::TCPIPSend(AnsiString strSend)
ServerSocket1->Socket->Connections[0]->SendText(strSend);
ClientSocket1->Socket->SendText(strSend);
//-------------Получение--------------------------------------------------------
void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,
AnsiString strPriem=Socket->ReceiveText();
Priem(CharToMas(strPriem.c_str()));
//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1ClientConnect(TObject *Sender,
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Connect(TObject *Sender,
//StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost;
//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1Listen(TObject *Sender,
//StatusBar1->Panels->Items[0]->Text="Listening...";
//--------------Разрыв соединения-------------------------------------------
void __fastcall TMainForm::TCPIPCloseConnection(void)
//-----------Обработка ошибок---------------------------------------------------
void __fastcall TMainForm::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
Application->MessageBox("Не удалось осуществить соединение с сервером.\nУбедитесь, что сервер ожидает запроса клиента.","Ошибка",MB_OK+MB_ICONHAND);
Application->MessageBox("Ошибка TCP/IP","Ошибка",MB_OK+MB_ICONHAND);
void __fastcall TMainForm::ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
//-----------------------------------------------------------------------------
//---------------------------------------------------------------------------
#define NETBIOS_SERVER_NAME "Kosti Server "
#define NETBIOS_CLIENT_NAME "Kosti Client "
//---------------------------------------------------------------------------
//----------------------------Подключение---------------------------------------
void __fastcall TMainForm::NetBiosConnect(void)
rc = WSAStartup(MAKEWORD(2,0), &WSAData);
Application->MessageBox("Ошибка инициализации WSAStartup","Ошибка",MB_OK+MB_ICONHAND);
NetBiosSocket = socket(AF_NETBIOS, SOCK_SEQPACKET, -Lana);
if (NetBiosSocket == INVALID_SOCKET)
memset(&OurAddress, 0, sizeof(OurAddress));
OurAddress.snb_family = AF_NETBIOS;
OurAddress.snb_type = NETBIOS_UNIQUE_NAME;
strcpy(OurAddress.snb_name,NETBIOS_SERVER_NAME);
Развитие и структура стека TCP/IP. Прикладной, транспортный, сетевой и канальный уровень. Гибкий формат заголовка. Поддержка резервирования пропускной способности. Протокол SNMP (Simple Network Management Protocol) для организации сетевого управления. реферат [404,3 K], добавлен 02.06.2016
Теоретические основы организации локальных компьютерных сетей: определение ЛС, топология, используемые протоколы обмена данными для связи рабочих станций и ЭВМ; программные средства. Сетевое окружение; идентификация компьютера с помощью IP-адреса. курсовая работа [335,9 K], добавлен 15.05.2014
Выбор технологии (ADSL) построения сетевой проводной инфраструктуры передачи данных для Интернет провайдера г. Донского и прилегающих микрорайонов; используемое программное обеспечение; подробная настройка биллинговой системы и сетевого оборудования. курсовая работа [6,6 M], добавлен 23.06.2011
Выбор и обоснование среды передачи данных, коммутационного оборудования. Физическая и логическая структуризация сети. Выбор и обоснование серверного оборудования. Система бесперебойного электроснабжения и мероприятия по обеспечению сетевой безопасности. курсовая работа [4,0 M], добавлен 26.01.2009
Функции, комплектация и характеристики системы видеонаблюдения. Сетевой коммутатор, его функции. Маршрутизатор - специализированный сетевой компьютер, имеющий два или более сетевых интерфейса и пересылающий пакеты данных между различными сегментами сети. контрольная работа [674,3 K], добавлен 26.05.2015
Архитектура вычислительных сетей, их классификация, топология и принципы построения. Передача данных в сети, коллизии и способы их разрешения. Протоколы TCP-IP. OSI, DNS, NetBios. Аппаратное обеспечение для передачи данных. Система доменных имён DNS. реферат [1,1 M], добавлен 03.11.2010
Формирование адресной структуры сети. Источник бесперебойного питания. Сетевой кабель, коммутаторы и короба. Логическая организация сети. Специализированные программные средства защиты информации. Применение антивирусного программного обеспечения. курсовая работа [3,3 M], добавлен 13.07.2015
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Создание сетевой игры курсовая работа. Коммуникации, связь, цифровые приборы и радиоэлектроника.
Сочинение По Тексту Лиханова
Взятки Диссертация
Реферат: Employee Attitudes Essay Research Paper IntroductionA happy
Реферат по теме Стихотворение С.А. Есенина 'Пороша'
Курсовая работа по теме Метод расчета плотности воды по уравнениям состояния Кнудсена
Реферат по теме Труд и развитие личности
Дипломная Работа На Тему Принципи Та Удосконалювання Сучасних Методів Управління Якістю
Доклад: Нет проституции. Сексингу - да
Реферат: Политизированные неформальные объединения молодежи: особенности и этапы развития
Эссе Филд Сигареты
Лейбниц Его Философское Учение Реферат
Реферат по теме Електросон
Купить Курсовую Барнаул
Любовь К Людям Эссе
Реферат по теме Способности и интеллект
Курсовая работа по теме Расторжение трудового договора (контракта) по инициативе работника
Реферат: Протоколы обмена маршрутной информацией стека TCP/IP
Теоретическая Глава Курсовой Работы
Литературные Направления Для Итогового Сочинения 2022
Евтушенко Собрание Сочинений В 9 Томах Купить
Иск в хозяйственном процессе - Государство и право реферат
Социальная структура спартанского общества VI–V вв до н.э. - История и исторические личности реферат
Чермоз в 1861 году: отмена крепостного права - История и исторические личности аттестационная работа


Report Page