12.1. Exemple TCP / IP chat

Chat formulaire exemple Socket TCP / IP
Considérations:
Établir un port de communication valable pour ServerSocket ClientSocket et Propriétés -> Port, comme 1024.
Ajouter un contrôle Panel StatusBar1 Propriétés -> Panneaux -> Ajout de nouveau.
main.cpp
//------------------------------------------------ ---------------------------
# Include
# Hdrstop Pragma
# Include "main.h"
//------------------------------------------------ ---------------------------
# Pragma lien "ScktComp"
# Ressources Pragma "*. dfm"
TChatForm * ChatForm;
//------------------------------------------------ ---------------------------
__fastcall TChatForm:: TChatForm (Propriétaire * TComponent): TForm (Owner)
{
}
//------------------------------------------------ ---------------------------
/ / Activer Socket Server et spécifier le mode d'écoute
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: CheckBoxListenClick (TObject * Sender)
{
/ / CheckBoxList-> Checked = CheckBoxList-> Checked!;
if (CheckBoxList-> Checked) {
ClientSocket-> Active = false;
ServerSocket-> Active = true;
StatusBar1-> Articles Panneaux-> [0] - Texte> = «À l'écoute ...";
Else {}
if (ServerSocket-> Active) {
ServerSocket-> Active = false;
}
StatusBar1-> Articles Panneaux-> [0] - Texte> = "";
}
}
//------------------------------------------------ ---------------------------
/ / Connexion à l'hôte spécifié
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: ConnectClick (TObject * Sender)
{
/ / Si une connexion est active, il doit fermer avant d'établir un nouveau
if (ClientSocket-> Active) {
ClientSocket-> Active = false;
}
/ / Se connecter au serveur
if (InputQuery ("informatique de se connecter à", "Nom Adresse:", serveur)) {/ / Demander à l'IP du serveur
if (Server.Length ()> 0) {
ClientSocket-> Host = Server / / Spécifiez le IP de l'hôte
ClientSocket-> Active = true, / / Se connecter au serveur
/ / CheckBoxList-> Checked = false; / / Fermer le serveur et quitter le mode d'écoute
/ / Si vous arrêtez le serveur, vous ne pouvez pas établir une connexion à localhost
}
}
}
//------------------------------------------------ ---------------------------
/ / Fermer la sortie et de la communication
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: ExitClick (TObject * Sender)
{
Fermer ServerSocket-> (); / / Fermer le Socket Server
Fermer ClientSocket-> (); / / Fermeture de la socket client
Close (); / Programme / Sortie
}
//------------------------------------------------ ---------------------------
/ / Transmission de données
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: Memo1KeyDown (TObject * Sender, WORD & Key, TShiftState Shift)
{
if (Key == VK_RETURN) {/ / Si vous appuyez sur le retour chariot
/ / Si nous agissons comme un serveur, un client s'est connecté à nous
if (IsServer) {
/ / Envoyer la ligne courante
ServerSocket-> Connexions Socket-> [0] -> paramètre texteAEnvoyer (Memo1-> Lines-> Strings [Memo1-> Lines-> Count - 1]);
}
/ / Si nous agissons en tant que client, vous vous connectez à un serveur
else {
/ / Envoyer la ligne courante
ClientSocket-> Socket-> paramètre texteAEnvoyer (Memo1-> Lines-> Strings [Memo1-> Lines-> Count -1]);
}
}
}
//------------------------------------------------ ---------------------------
/ / Lors du démarrage du programme
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: FormCreate (TObject * Sender)
{
CheckBoxList-> Checked = true, / / Activer Socket et entrez le mode d'écoute
}
//------------------------------------------------ ---------------------------
/ / Lors de la connexion
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketConnect (TObject * Sender, TCustomWinSocket * Socket)
{
StatusBar1-> Articles Panneaux-> [0] - Texte> = "Se connecter à:" + RemoteHost Socket->;
}
//------------------------------------------------ ---------------------------
/ / Arrêt ou déconnecter la connexion
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: DisconnectClick (TObject * Sender)
{
ClientSocket-> Active = false; / / Fermeture de la connexion au serveur
ServerSocket-> Active = true, / / Activer et entrez ServerSocket mode d'écoute
StatusBar1-> Articles Panneaux-> [0] - Texte> = «À l'écoute ...";
}
//------------------------------------------------ ---------------------------
/ / Se produit quand un socket client doit lire la connexion de socket.
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: ClientSocketRead (TObject * Sender, TCustomWinSocket * Socket)
{
/ / Lorsque le serveur envoie ces données au coefficient et le processus a
Memo2-> Lines-> Add (Socket-> ReceiveText ()) / / Ajouter des données à la réception de la mémoire
}
//------------------------------------------------ ---------------------------
/ / Se produit lorsque la socket serveur doit lire les informations à partir d'un socket client.
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: ServerSocketClientRead (TObject * Sender, TCustomWinSocket * Socket)
{
/ / Lorsque le client envoie des données vers le serveur et que le processus a
Memo2-> Lines-> Add (Socket-> ReceiveText ()) / / Ajouter des données à la réception de la mémoire
}
//------------------------------------------------ ---------------------------
/ / Il se produit sur un serveur socket immédiatement après l'acceptation de la connexion à un socket client.
//------------------------------------------------ ---------------------------
TChatForm void __fastcall: ServerSocketAccept (TObject * Sender, TCustomWinSocket * Socket)
{
IsServer = true, / / en tant que serveur
StatusBar1-> Articles Panneaux-> [0] - Texte> = "Se connecter à:" + RemoteAddress Socket->;
}
//------------------------------------------------ ---------------------------
/ / Se produit quand une connexion client complet socket acceptée par le socket serveur.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ServerSocketClientConnect (TObject * Sender, TCustomWinSocket * Socket)
{
Memo2-> Lines-> Clear (); / / Nettoyer la note de service de données
}
//------------------------------------------------ ---------------------------
/ / Il se produit juste avant une connexion socket client fermé à un serveur.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketDisconnect (TObject * Sender, TCustomWinSocket * Socket)
{
/ / CheckBoxList-> Checked = true, / Activer / Socket et entrez le mode d'écoute
/ / Seulement si c'est pour le serveur quand il agit comme un client
}
//------------------------------------------------ ---------------------------
/ / Lorsque la connexion socket échoue, l'utilisation, ou fermer une connexion.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketError (TObject * Sender, TCustomWinSocket * Socket, TErrorEvent ErrorEvent, int & ErrorCode)
{
Memo2-> Lines-> Add ("Erreur de connexion à:" + Server);
ErrorCode = 0;
}
//------------------------------------------------ ---------------------------
/ / Se produit lorsque la connexion à un socket client est fermé.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ServerSocketClientDisconnect (TObject * Sender, TCustomWinSocket * Socket)
{
StatusBar1-> Articles Panneaux-> [0] - Texte> = «À l'écoute ...";
}
main.h
//------------------------------------------------ ---------------------------
# Ifndef mainha
# Définir mainha
//------------------------------------------------ ---------------------------
# Inclure <Classes.hpp>
# Inclure <Controls.hpp>
# Inclure <StdCtrls.hpp>
# Inclure <Forms.hpp>
# Include "ScktComp.hpp"
# Inclure <Buttons.hpp>
# Inclure <ComCtrls.hpp>
# Inclure <ExtCtrls.hpp>
# Inclure <Menus.hpp>
//------------------------------------------------ ---------------------------
classe TChatForm: TForm public
{
__published: / / IDE gérés Composants
TStatusBar StatusBar1 *;
TPanel Panel1 *;
TMemo Memo1 *;
TMemo Memo2 *;
TServerSocket * ServerSocket;
TClientSocket * ClientSocket;
* Connectez TButton;
TCheckBox * CheckBoxList;
* Débranchez TButton;
TButton * sortie;
void __fastcall Memo1KeyDown (TObject * Sender, WORD & Key,
Maj TShiftState);
void __fastcall FormCreate (TObject * Sender);
void __fastcall ClientSocketConnect (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall ClientSocketDisconnect (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall ClientSocketRead (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall ServerSocketClientRead (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall ServerSocketAccept (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall ServerSocketClientConnect (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall ClientSocketError (TObject * Sender,
TCustomWinSocket * Socket, TErrorEvent ErrorEvent, int & ErrorCode);
void __fastcall ServerSocketClientDisconnect (TObject * Sender,
TCustomWinSocket * Socket);
void __fastcall CheckBoxListenClick (TObject * Sender);
void __fastcall ConnectClick (TObject * Sender);
void __fastcall DisconnectClick (TObject * Sender);
void __fastcall ExitClick (TObject * Sender);
déclarations / / utilisateur: privé
déclarations / / utilisateur: public
IsServer bool / / agir en tant que serveur
Server String / / IP pour se connecter au serveur
TChatForm __fastcall (Propriétaire * TComponent);
};
//------------------------------------------------ ---------------------------
extern ChatForm * TChatForm;
//------------------------------------------------ ---------------------------
# Endif