Курсовая работа: Создание сетевой игры
closesocket(IPXSocket);
IPXSocket =
INVALID_SOCKET;
Application->Terminate();
}
}
//-------------------------разрыв---------------------------------------------
void __fastcall
TMainForm::IPXCloseConnection(void)
{
closesocket(IPXSocket);
WSACleanup();
}
TCP.cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include
"TCPIP.h"
#include
"Main.h"
#include
"Podkluch.h"
//---------------------------------------------------------------------------
#pragma
package(smart_init)
extern bool IsServer;
extern bool IsHostName;
extern AnsiString
ServerHostName;
extern AnsiString
ServerHostIP;
extern int KolKub;
extern int MaxOch;
//----------Подключение---------------------------------------------------
void __fastcall
TMainForm::TCPIPConnect(void)
{
if (IsServer==true)
{
ClientSocket1->Close();
ServerSocket1->Open();
}
else
{
ServerSocket1->Close();
if (IsHostName)
ClientSocket1->Host=ServerHostName;
else
ClientSocket1->Host=ServerHostIP;
ClientSocket1->Open();
}
}
//---------Accept---------------------------------------------------------------
void __fastcall
TMainForm::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket
*Socket)
{
char
*strPered=DannieToChar(0,KolKub,MaxOch);
TCPIPSend(AnsiString(strPered));
InterfaceBeginNewGame();
ChangeInterfacePerehodHoda(1);
}
//----------Отправка------------------------------------------------------------
void __fastcall
TMainForm::TCPIPSend(AnsiString strSend)
{
if(IsServer)
ServerSocket1->Socket->Connections[0]->SendText(strSend);
else
ClientSocket1->Socket->SendText(strSend);
}
//-------------Получение--------------------------------------------------------
void __fastcall
TMainForm::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket
*Socket)
{
if(IsVisitApplicationBox) return;
AnsiString
strPriem=Socket->ReceiveText();
Priem(CharToMas(strPriem.c_str()));
}
//---------------------------------------------------------------------------
void __fastcall
TMainForm::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket
*Socket)
{
//
}
//---------------------------------------------------------------------------
void __fastcall
TMainForm::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket
*Socket)
{
//StatusBar1->Panels->Items[0]->Text
= "Connect to: " + Socket->RemoteHost;
}
//---------------------------------------------------------------------------
void __fastcall
TMainForm::ServerSocket1Listen(TObject *Sender,
TCustomWinSocket
*Socket)
{
//StatusBar1->Panels->Items[0]->Text="Listening...";
}
//--------------Разрыв
соединения-------------------------------------------
void __fastcall
TMainForm::TCPIPCloseConnection(void)
{
ServerSocket1->Close();
ClientSocket1->Close();
}
//-----------Обработка
ошибок---------------------------------------------------
void __fastcall
TMainForm::ClientSocket1Error(TObject *Sender,
TCustomWinSocket
*Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
if(ErrorEvent==eeConnect)
{
ErrorCode=0;
Application->MessageBox("Не удалось осуществить соединение с
сервером.\nУбедитесь, что сервер ожидает запроса
клиента.","Ошибка",MB_OK+MB_ICONHAND);
}
else
{
Application->MessageBox("Ошибка
TCP/IP","Ошибка",MB_OK+MB_ICONHAND);
Application->Terminate();
}
}
void __fastcall
TMainForm::ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket
*Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
//
}
//-----------------------------------------------------------------------------
Netbios.cpp
//---------------------------------------------------------------------------
#pragma hdrstop
#include <winsock.h>
#include <wsnetbs.h>
#include <stdio.h>
#include
"NetBios.h"
#include
"Main.h"
#include
"Podkluch.h"
#define
NETBIOS_SERVER_NAME "Kosti Server "
#define
NETBIOS_CLIENT_NAME "Kosti Client "
#define WSA_ACCEPT
(WM_USER + 1)
#define WSA_NETEVENT
(WM_USER+2)
//---------------------------------------------------------------------------
#pragma
package(smart_init)
SOCKET NetBiosSocket;
sockaddr_nb OurAddress;
sockaddr_nb CallAddress;
extern bool IsServer;
extern int KolKub;
extern int MaxOch;
//----------------------------Подключение---------------------------------------
void __fastcall
TMainForm::NetBiosConnect(void)
{
WSADATA WSAData;
int rc;
rc =
WSAStartup(MAKEWORD(2,0), &WSAData);
if (rc != 0)
{
Application->MessageBox("Ошибка инициализации
WSAStartup","Ошибка",MB_OK+MB_ICONHAND);
Application->Terminate();
}
int Lana;
for (Lana=0;Lana<1000;Lana++)
{
NetBiosSocket =
socket(AF_NETBIOS, SOCK_SEQPACKET, -Lana);
if (NetBiosSocket
== INVALID_SOCKET)
{
continue;
}
memset(&OurAddress, 0, sizeof(OurAddress));
OurAddress.snb_family = AF_NETBIOS;
OurAddress.snb_type = NETBIOS_UNIQUE_NAME;
if(IsServer)
strcpy(OurAddress.snb_name,NETBIOS_SERVER_NAME);
else
strcpy(OurAddress.snb_name,NETBIOS_CLIENT_NAME);
if
(bind(NetBiosSocket, (LPSOCKADDR)&OurAddress, sizeof(sockaddr_nb)) ==
SOCKET_ERROR)
{
closesocket(NetBiosSocket);
NetBiosSocket
= INVALID_SOCKET;
continue;
}
else break;
}
if(Lana==1000)
{
Application->MessageBox("Не определена
Lana","Ошибка",MB_OK+MB_ICONHAND);
Application->Terminate();
}
if(IsServer)
{
if(listen(NetBiosSocket, 1) == SOCKET_ERROR )
{
Application->MessageBox("Listen
Error","Ошибка",MB_OK+MB_ICONHAND);
closesocket(NetBiosSocket);
Application->Terminate();
}
rc =
WSAAsyncSelect(NetBiosSocket, Handle, WSA_ACCEPT, FD_ACCEPT);
if (rc != 0)
{
Application->MessageBox("Ошибка
WSAAsyncSelect","Ошибка",MB_OK+MB_ICONHAND);
closesocket(NetBiosSocket);
NetBiosSocket = INVALID_SOCKET;
Application->Terminate();
}
}
else
{
memset(&CallAddress, 0, sizeof(CallAddress));
CallAddress.snb_family = AF_NETBIOS;
CallAddress.snb_type = NETBIOS_UNIQUE_NAME;
strcpy(CallAddress.snb_name,NETBIOS_SERVER_NAME);
if(connect(NetBiosSocket , (PSOCKADDR )&CallAddress, sizeof(CallAddress))
< 0)
{
Application->MessageBox("Connect
Error","Ошибка",MB_OK+MB_ICONHAND);
closesocket(NetBiosSocket);
Application->Terminate();
}
rc =
WSAAsyncSelect(NetBiosSocket, Handle, WSA_NETEVENT, FD_READ);
if (rc != 0)
{
Application->MessageBox("Ошибка
WSAAsyncSelect","Ошибка",MB_OK+MB_ICONHAND);
closesocket(NetBiosSocket);
NetBiosSocket = INVALID_SOCKET;
Application->Terminate();
}
}
WindowProc =
NetBiosWndProc;
}
//-------------------Прием
и accept---------------------------------------------
void __fastcall
TMainForm::NetBiosWndProc(Messages::TMessage &Message)
{
int rc;
char Buf[80];
if (Message.Msg ==
WSA_NETEVENT)
{
if (Message.LParam
== FD_READ)
{
rc =
recv((SOCKET)Message.WParam, Buf, sizeof(Buf)-1, 0);
if (rc == SOCKET_ERROR)
{
rc =
WSAGetLastError();
Application->MessageBox("Ошибка recv
NetBios","Ошибка",MB_OK+MB_ICONHAND);
closesocket(NetBiosSocket);
NetBiosSocket = INVALID_SOCKET;
Application->Terminate();
}
if (rc >=
1)
{
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9 |