12.1. Beispiel TCP / IP-Chat
Chat Form Socket Beispiel TCP / IP
Überlegungen:
Aufbau eines Kommunikations-Port gültig für ServerSocket ClientSocket und Eigenschaften -> Port wie 1024.
Fügen Sie ein Panel-Steuerelement StatusBar1 Eigenschaften -> Panels -> Neu hinzufügen.
main.cpp
//------------------------------------------------ ---------------------------
# Include
# Pragma hdrstop
# Include "main.h"
//------------------------------------------------ ---------------------------
# Pragma link "ScktComp"
# Pragma resource "*. dfm"
TChatForm * ChatForm;
//------------------------------------------------ ---------------------------
TChatForm __fastcall: TChatForm (TComponent * Owner): TForm (Eigentümer)
{
}
//------------------------------------------------ ---------------------------
/ / Enable-Socket-Server und geben Sie den Wiedergabemodus
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: CheckBoxListenClick (TObject * Sender)
{
/ / CheckBoxList-> Checked = CheckBoxList-> Checked!;
if (CheckBoxList-> Checked) {
ClientSocket-> Active = false;
ServerSocket-> Active = true;
StatusBar1-> Panels-> Items [0] -> text = "Listening ...";
Else {}
if (ServerSocket-> Active) {
ServerSocket-> Active = false;
}
StatusBar1-> Panels-> Items [0] -> Text = "";
}
}
//------------------------------------------------ ---------------------------
/ / An den angegebenen Host verbinden
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ConnectClick (TObject * Sender)
{
/ / Wenn eine Verbindung aktiv ist, muss es vor der Gründung der Nähe ein neues
if (ClientSocket-> Active) {
ClientSocket-> Active = false;
}
/ / Mit Server verbinden
if (InputQuery ("Computer zu verbinden", "Adresse Name:" Server)) {/ / Fragen an den Server-IP
if (Server.Length ()> 0) {
ClientSocket-> Host = Server / / Geben Sie die Host-IP
ClientSocket-> Active = true, / / Mit Server verbinden
/ / CheckBoxList-> Checked = false; / / Schließen Sie den Server und lassen Sie den Wiedergabemodus
/ / Wenn Sie den Server stoppen, können Sie keine Verbindung zu localhost
}
}
}
//------------------------------------------------ ---------------------------
/ / Schließen und beenden Sie die Kommunikation
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ExitClick (TObject * Sender)
{
ServerSocket-> Close (); / / Schließen der Socket Server
ClientSocket-> Close (); / / Schließen der Socket Client
Close (); / / Programm beenden
}
//------------------------------------------------ ---------------------------
/ / Sendedaten
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: Memo1KeyDown (TObject * Sender, WORD & Key, TShiftState Shift)
{
if (Key == VK_RETURN) {/ / Wenn drückte den Wagenrücklauf
/ / Wenn wir als Server fungieren, hat ein Kunde mit uns in Verbindung
if (IsServer) {
/ / Senden der aktuellen Zeile
ServerSocket-> Socket-> Verbindungen [0] -> SendText (Memo1-> Lines-> Strings [Memo1-> Lines-> Count - 1]);
}
/ / Wenn wir als Client fungieren, treten Sie mit einem Server
else {
/ / Senden der aktuellen Zeile
ClientSocket-> Socket-> SendText (Memo1-> Lines-> Strings [Memo1-> Lines-> Count -1]);
}
}
}
//------------------------------------------------ ---------------------------
/ / Wenn das Programm gestartet
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: FormCreate (TObject * Sender)
{
CheckBoxList-> Checked = true, / / aktiviere Sockel und geben Hörmodus
}
//------------------------------------------------ ---------------------------
/ / Beim Anschluss
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketConnect (TObject * Sender, TCustomWinSocket * Sockel)
{
StatusBar1-> Panels-> Items [0] -> Text = "Verbinden mit:" + Socket-> RemoteHost;
}
//------------------------------------------------ ---------------------------
/ / Stop oder die Verbindung trennen
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: DisconnectClick (TObject * Sender)
{
ClientSocket-> Active = false; / / Schließen der Verbindung zum Server
ServerSocket-> Active = true, / / Aktivieren und geben ServerSocket Hörmodus
StatusBar1-> Panels-> Items [0] -> text = "Listening ...";
}
//------------------------------------------------ ---------------------------
/ / Tritt ein, wenn ein Client Socket lesen sollte die Socket-Verbindung.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketRead (TObject * Sender, TCustomWinSocket * Sockel)
{
/ / Wenn der Server sendet diese Daten an die Koeffizienten und der Prozess hat
Memo2-> Lines-> Add (Sockel-> ReceiveText ()) / / Hinzufügen von Daten auf den Speicher-Empfang
}
//------------------------------------------------ ---------------------------
/ / Tritt ein, wenn der Server-Socket die Informationen von einem Client-Socket gelesen werden sollte.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ServerSocketClientRead (TObject * Sender, TCustomWinSocket * Sockel)
{
/ / Wenn der Client Daten an den Server sendet und dass der Prozess
Memo2-> Lines-> Add (Sockel-> ReceiveText ()) / / Hinzufügen von Daten auf den Speicher-Empfang
}
//------------------------------------------------ ---------------------------
/ / Es tritt auf einem Socket-Server direkt nach der Verbindung zu einem Client-Socket.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ServerSocketAccept (TObject * Sender, TCustomWinSocket * Sockel)
{
IsServer = true, / / die als Server
StatusBar1-> Panels-> Items [0] -> Text = "Verbinden mit:" + Socket-> remoteaddress;
}
//------------------------------------------------ ---------------------------
/ / Tritt ein, wenn eine vollständige Client-Socket-Verbindung durch den Server-Socket akzeptiert.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ServerSocketClientConnect (TObject * Sender, TCustomWinSocket * Sockel)
{
Memo2-> Lines-> Clear (); / / Reinigen Sie die Daten Memo
}
//------------------------------------------------ ---------------------------
/ / Es kommt kurz vor einem geschlossenen Client-Socket-Verbindung zu einem Server.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketDisconnect (TObject * Sender, TCustomWinSocket * Sockel)
{
/ / CheckBoxList-> Checked = true, / / aktiviere Sockel und geben Hörmodus
/ / Nur wenn es für den Server, wenn es als Client
}
//------------------------------------------------ ---------------------------
/ / Wenn der Socket-Verbindung fehlschlägt, verwenden, oder schließen Sie eine Verbindung.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ClientSocketError (TObject * Sender, TCustomWinSocket * Sockel, TErrorEvent ErrorEvent, int & ErrorCode)
{
Memo2-> Lines-> Add ("Fehler beim Verbinden zu:" + Server);
ErrorCode = 0;
}
//------------------------------------------------ ---------------------------
/ / Tritt ein, wenn eine Verbindung zu einem Client-Socket wird geschlossen.
//------------------------------------------------ ---------------------------
void __fastcall TChatForm: ServerSocketClientDisconnect (TObject * Sender, TCustomWinSocket * Sockel)
{
StatusBar1-> Panels-> Items [0] -> text = "Listening ...";
}
main.h
//------------------------------------------------ ---------------------------
# Ifndef mainha
# Definieren mainha
//------------------------------------------------ ---------------------------
# Include <Classes.hpp>
# Include <Controls.hpp>
# Include <StdCtrls.hpp>
# Include <Forms.hpp>
# Include "ScktComp.hpp"
# Include <Buttons.hpp>
# Include <ComCtrls.hpp>
# Include <ExtCtrls.hpp>
# Include <Menus.hpp>
//------------------------------------------------ ---------------------------
TChatForm Klasse: public TForm
{
__published: / / IDE verwaltete Komponenten
TStatusBar * StatusBar1;
TPanel * Panel1;
TMemo * Memo1;
TMemo * Memo2;
TServerSocket * ServerSocket;
TClientSocket * ClientSocket;
TButton * Schließen;
TCheckBox * CheckBoxList;
TButton * Trennen;
TButton * Ausfahrt;
void __fastcall Memo1KeyDown (TObject * Sender, WORD & Key,
TShiftState Shift);
void __fastcall FormCreate (TObject * Sender);
void __fastcall ClientSocketConnect (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall ClientSocketDisconnect (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall ClientSocketRead (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall ServerSocketClientRead (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall ServerSocketAccept (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall ServerSocketClientConnect (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall ClientSocketError (TObject * Sender,
TCustomWinSocket * Sockel, TErrorEvent ErrorEvent, int & ErrorCode);
void __fastcall ServerSocketClientDisconnect (TObject * Sender,
TCustomWinSocket * Sockel);
void __fastcall CheckBoxListenClick (TObject * Sender);
void __fastcall ConnectClick (TObject * Sender);
void __fastcall DisconnectClick (TObject * Sender);
void __fastcall ExitClick (TObject * Sender);
private: / / User Erklärungen
public: / / User Erklärungen
bool IsServer / / fungieren als Server
Server String / / IP-Verbindung zum Server
__fastcall TChatForm (TComponent * Owner);
};
//------------------------------------------------ ---------------------------
extern TChatForm * ChatForm;
//------------------------------------------------ ---------------------------
# Endif