CallAddress.sa_family = AF_IPX;
CallAddress.sa_socket = htons(IPX_SERVER_SOCKET);
CallAddress.sa_nodenum[0] = 0xff;
CallAddress.sa_nodenum[1] = 0xff;
CallAddress.sa_nodenum[2] = 0xff;
CallAddress.sa_nodenum[3] = 0xff;
CallAddress.sa_nodenum[4] = 0xff;
CallAddress.sa_nodenum[5] = 0xff;
rc = sendto(IPXSocket, "connect", 8, 0, (PSOCKADDR)&CallAddress, sizeof(SOCKADDR));
if (rc == SOCKET_ERROR)
{
rc = WSAGetLastError();
Application->MessageBox("Ошибка sendto IPX","Ошибка",MB_OK+MB_ICONHAND);
closesocket(IPXSocket);
IPXSocket = INVALID_SOCKET;
Application->Terminate();
}
rc = WSAAsyncSelect(IPXSocket, Handle, WSA_NETEVENT, FD_READ);
if (rc != 0)
Application->MessageBox("Ошибка WSAAsyncSelect","Ошибка",MB_OK+MB_ICONHAND);
WindowProc = IPXWndProc;
//------------------------------прием---------------------------------------
void __fastcall TMainForm::IPXWndProc(Messages::TMessage &Message)
int rc, l=sizeof(CallAddress);
char Buf[80];
if (Message.Msg == WSA_NETEVENT)
if (Message.LParam == FD_READ)
rc = recvfrom((SOCKET)Message.WParam, Buf, sizeof(Buf)-1, 0, (PSOCKADDR)&CallAddress, &l);
Application->MessageBox("Ошибка recvfrom IPX","Ошибка",MB_OK+MB_ICONHAND);
if (rc >= 1)
if(!strcmp(Buf,"connect"))
char *strPered=DannieToChar(0,KolKub,MaxOch);
IPXSend(strPered);
InterfaceBeginNewGame();
ChangeInterfacePerehodHoda(1);
else
if(IsVisitApplicationBox) return;
Priem(CharToMas(Buf));
WndProc(Message);
//-------------------------отправка---------------------------------------------
void __fastcall TMainForm::IPXSend (char* Buf)
int rc;
rc = sendto(IPXSocket, Buf, strlen(Buf)+1, 0, (PSOCKADDR)&CallAddress, sizeof(SOCKADDR));
//-------------------------разрыв---------------------------------------------
void __fastcall TMainForm::IPXCloseConnection(void)
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();
ServerSocket1->Close();
if (IsHostName)
ClientSocket1->Host=ServerHostName;
ClientSocket1->Host=ServerHostIP;
ClientSocket1->Open();
//---------Accept---------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
TCPIPSend(AnsiString(strPered));
//----------Отправка------------------------------------------------------------
void __fastcall TMainForm::TCPIPSend(AnsiString strSend)
if(IsServer)
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)
if(ErrorEvent==eeConnect)
ErrorCode=0;
Application->MessageBox("Не удалось осуществить соединение с сервером.\nУбедитесь, что сервер ожидает запроса клиента.","Ошибка",MB_OK+MB_ICONHAND);
Application->MessageBox("Ошибка TCP/IP","Ошибка",MB_OK+MB_ICONHAND);
void __fastcall TMainForm::ServerSocket1ClientError(TObject *Sender,
//-----------------------------------------------------------------------------
Netbios.cpp
#include <winsock.h>
#include <wsnetbs.h>
#include <stdio.h>
#include "NetBios.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)
SOCKET NetBiosSocket;
sockaddr_nb OurAddress;
sockaddr_nb CallAddress;
//----------------------------Подключение---------------------------------------
void __fastcall TMainForm::NetBiosConnect(void)
WSADATA WSAData;
rc = WSAStartup(MAKEWORD(2,0), &WSAData);
Application->MessageBox("Ошибка инициализации WSAStartup","Ошибка",MB_OK+MB_ICONHAND);
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;
strcpy(OurAddress.snb_name,NETBIOS_SERVER_NAME);
strcpy(OurAddress.snb_name,NETBIOS_CLIENT_NAME);
if (bind(NetBiosSocket, (LPSOCKADDR)&OurAddress, sizeof(sockaddr_nb)) == SOCKET_ERROR)
closesocket(NetBiosSocket);
NetBiosSocket = INVALID_SOCKET;
else break;
if(Lana==1000)
Application->MessageBox("Не определена Lana","Ошибка",MB_OK+MB_ICONHAND);
if(listen(NetBiosSocket, 1) == SOCKET_ERROR )
Application->MessageBox("Listen Error","Ошибка",MB_OK+MB_ICONHAND);
rc = WSAAsyncSelect(NetBiosSocket, Handle, WSA_ACCEPT, FD_ACCEPT);
Страницы: 1, 2, 3, 4, 5, 6, 7