(usando componentes VCL)
SUJA é um servidor para jogos - aqui há aqui uma descrição de como usá-lo e como programar CLIENTES usando componentes do Borland C++ BUILDER
Utilizei o Builder 3 porque na minha versão gratuita é a que tinha a palete "Internet" com o ServerSocket e o ClientSocket. Qualquer versão que tenha a palete Internet instalada deve funcionar, provavelmente.
Ingredientes
1 Form
4 Label
4 Edit
3 Button
1 Status Bar
1 ClientSocket
Mode de preparo:
Coloque os componentes adequadamente dentro do Form1.
A seguir dê um duplo clique em cada um dos componentes abaixo listados, introduzindo o código colorido mostrado abaixo:
Button1:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Address=Edit1->Text;
ClientSocket1->Port=StrToInt(Edit2->Text);
StatusBar1->SimpleText="Connecting ...";
ClientSocket1->Open();
}Button2:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
StatusBar1->SimpleText="Disconnecting ...";
ClientSocket1->Close();
}Button3:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char buffer[256];
int len;
strcpy(buffer,Edit3->Text.c_str());
len=ClientSocket1->Socket->SendBuf(buffer,strlen(buffer));
StatusBar1->SimpleText=IntToStr(len)+" bytes sent!";
}ClientSocket1 (Clique no componente ClientSocket1 dentro do Form, vá na aba Events do Object Inspector e procure os eventos OnConnect, OnDisconnect, OnError e OnRead, dando um duplo clique do lado direito de cada um deles adicionando para cada evento o código abaixo):
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
Button1->Enabled=false;
Button2->Enabled=true;
Button3->Enabled=true;
StatusBar1->SimpleText="Connected!";
}
//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Button1->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
StatusBar1->SimpleText="Disconnected!";
}
//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
char buffer[256];
int len;
len=ClientSocket1->Socket->ReceiveBuf(buffer,255);
buffer[len]=0;
Edit4->Text=StrPas(buffer);
StatusBar1->SimpleText=IntToStr(len)+" bytes received!";
}
//---------------------------------------------------------------------------void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
StatusBar1->SimpleText="Socket Error!";
ErrorCode=0;
}Modifique a propriedade Caption do form e dos componentes (botões e labels) e limpe a propriedade Text de cada Edit conforme a imagem:
Labels:
Label1
Remote Host:
Label2
Port Number:
Label3
Message Sent:
Label4
Message Received:
Buttons
Button1
Connect
Button2
Disconnect
Button3
Send
Propriedade Text de cada Edit
Edit1
127.0.0.1
Edit2
4001
Edit3
Mensagem Inicial!
Edit4
[vazio]
Mode de usar :
1) chame o programa SUJA (o servidor de jogos) antes de rodar o cliente acima programado. O servidor, quando ativo, deve listar os IPs da máquina em que ele está rodando, supondo que seja uma máquina ligada em rede ou conectada na Internet;
2) rode o programa CLIENTE acima criado em quantas máquinas da rede quiser. Como o programa vai se comunicar com outros programas da rede, o ideal é que haja mais de duas máquinas rodando cada cliente, mas com duas mmáquinas já é possível testar o programa. Modifique os campos Remote Host (servidor remoto em Edit1) para o valor de IP detectado pelo servidor SUJA. Modifique a PORTA (Port Number no Edit2) para a porta correntemente usada (4001, por exemplo) pelo SUJA. Clique no botão CONNECT.
3) Se tudo der certo, o servidor SUJA deve detectar, para cada cliente rodando em rede, o número de conexões atual. Agora é só escrever uma mensagem no cliente no campo Message Sent (em Edit3) e clicar no botão Send (enviar). Todos os clientes conectados (inclusive quem está enviando a mensagem) receberão a mensagem enviada precedida do IP da máquina que a enviou.
Agora é com você! Use as mensagens enviadas para programar jogos em rede: ao invés de mensagens, cada cliente pode ser alterado para enviar posições ou jogadas de um jogo em andamento, além de detectar se a jogada é válida ou se alguém terminou/perdeu/ganhou o jogo! Você também pode alterar o programa para transformar os clientes em intercomunicadores pessoais, não esquecendo de inventar algum tipo de criptografia para seus programas-cliente!
Agora qualquer jogo online (seja de tabuleiro ou de ação) para jogadores em rede pode ser criado por você!
Copyright Victor M. Sant'Anna 2007