Machen einer Anwendung einen TCP/IP-Client (mit Beispiel-Code)...


Herstellen einer Verbindung zu einem TCP/IP-Server von einem Delphi-Client
Dieser Artikel ist eine Fortsetzung der vorherigen Artikel (als https://www.howtodothings.com/showarticle.asp?article=218)
sollen zeigen, wie wir die TclientSocket-Komponente in Delphi als TCP/IP Client gegen alle TCP/IP-Server nutzen können. Der Server konnte geschrieben werden, in Delphi, mit TserverSocket Komponente oder jedes Stück Code, das als eine TCP/IP-Server fungiert. In meinem Fall bin ich mit einem Java Interaktion, den Code als eine TCP/IP-Server fungiert.
In meinem Projekt ich bin nur ein Bündel von Bytes an diesen Java-Server senden und der Java-Server liest die Bytes und dabei einige Aufgaben, die eine verschiedene Reihe von Bytes als Antwort an den Delphi-Client senden.
In meinem letzten Artikel (als https://www.delphi3000.com/article.asp?id=1695) habe ich das Problem, das ich konfrontiert und eine Lösung fand ich dafür erklärt.
Lassen Sie in diesem Artikel mich einige Beispiel-Code, den ich in diesem Projekt verwendet, da einige Leute gefragt haben mir den Quellcode für diese Socket-Kommunikation per separate E-mails versenden. Ich schätze sie für ihr Interesse. Hier U fahren!! Genießen!!!
Mein Projekt benutzt fast neun Formen und alle Formulare müssen mindestens einmal mit dem Java-Server interagieren. Also habe ich ein DataModule hinzugefügt und setzen Sie dort ein TClientSocket-Komponente:
Im folgenden ist der Code dafür:
Einheit DataMod;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Graphics, Steuerelemente, Formulare, Dialoge,
ScktComp, OleServer;
Typ
TdmDataModule = class(TDataModule)
CsClientSocket: TClientSocket;
Procedure CsClientSocketError (Sender: TObject; Sockel: TCustomWinSocket; ErrorEvent: TErrorEvent; Var ErrorCode: Integer);
Procedure CsClientSocketRead (Sender: TObject;
Sockel: TCustomWinSocket);
Prozedur DataModuleDestroy(Sender: TObject);
Private
{Private Deklarationen}
Kneipe
lic
FWaiting: Boolean;
{Public Deklarationen}
Ende;
var
DmDataModule: TdmDataModule;
Umsetzung
{$R *. DFM}
Procedure TdmDataModule.csClientSocketRead (Sender: TObject;
Sockel: TCustomWinSocket);
Lesen von Daten zurück von Serversocket thro
var
Puffer: Array [0..4095] char;
BytesReceived: Integer;
MemoryStream: TMemoryStream;
beginnen
während der FWaiting zu tun
beginnen
MemoryStream: = TMemoryStream.Create;
versuchen Sie
Diese zeitliche Verzögerung hängt von den Netzwerkverkehr und du kannst auch die Zeitverzögerung zwischen mal gelesen
Ich habe gerade einige 200 Millisekunden für meine Anwendung setzen, bevor es vom Server lesen beginnt.
Sleep(200);
Während echte tun
beginnen
BytesReceived: = Socket.ReceiveBuf(Buffer,SizeOf(Buffer));
Wenn (BytesReceived < = 0) dann
Pause
sonst
beginnen
MemoryStream.Write(Buffer,BytesReceived);
Ende;
Ende;
FWaiting: = False;
MemoryStream.Position: = 0;
XMLResponse ist eine globale Stringlist verwende ich in meiner Anwendung die empfangenen Bytes in Zeichenfolge konvertieren
Andere Möglichkeiten, um den Inhalt eines Memorystream können Sie
XMLResponse.LoadFromStream(MemoryStream);
Schließlich
MemoryStream.Free;
Ende;
Ende;
Ende;
Procedure TdmDataModule.csClientSocketError (Sender: TObject;
Sockel: TCustomWinSocket; ErrorEvent: TErrorEvent;
Var ErrorCode: Integer);

{Wenn Sie einen bestimmten Typ von Fehler zu bekommen, während der Client ausgeführt wird Ihnen ein Messagedlg zeigen, dass der Fehler aufgetreten ist, zu diesem Zeitpunkt müssen Sie überprüfen, ob der Server korrekt oder nicht ausgeführt wird und bei Bedarf den Server ordnungsgemäß ausgeführt und dann sagen OK machen.
CsClientSocket.Open versuchen dann zum Server wiederherstellen. Wenn eine Transaktion in der Mitte ist müssen Sie also zu diesem Zeitpunkt das gleiche Material wieder nach dem Wiederverbinden senden.}
beginnen
RS ErrorEvent von
EeGeneral:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server! ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeConnect:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeSend:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeReceive:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeAccept:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
Ende;
Ende;
Prozedur TdmDataModule.DataModuleDestroy(Sender: TObject);
beginnen
Die Socketverbindung schließen
csClientSocket.Close;
Ende;
Ende.
Wenn Sie mit dem Datamodule fertig sind, können Sie diese Datamodule in Einheiten aufnehmen, wo Sie brauchen, um die Interaktion mit dem Server und damit können Sie vermeiden, Schreiben von Code zum Lesen von Daten vom Server an verschiedenen Stellen des Projekts.
Sie können die Host-Adresse und Portnummer des Servers zur Kommunikation während der Laufzeit durch die Common Language Runtime-Parameter festlegen. (Ich nehme an Delphi Menschen bewusst, dass Laufzeitparameter)
Dann in das Projekt des Hauptformulars Formcreate Ereignis; Schreiben Sie den folgenden Code zum Herstellen einer Verbindung mit des Servers. d.h. die IP-Adresse und Portnummer des Servers in der TClientSocket-Komponente und Set Active auf True festlegen.
Verbinden mit dem Java-Server einen bestimmten Port
versuchen Sie
mit dmDataModule.csClientSocket-do
beginnen
Wenn aktiv, dann Active: = False;
Immer die Adresse oder den Hostnamen des Servers durch die Common Language Runtime-Parameter
Host: = ParamStr(1);
Immer die Port-Nummer des Servers, der Server überwacht, durch die Common Language Runtime-Parameter
Port: = StrToInt(ParamStr(2));
Herstellen der Verbindung aktiv
Aktive: = True;
Ende;
außer auf ESocketError Do
beginnen
MessageDlg ('Keine Verbindung zum Server Java' + #13 + ' Bitte versuchen Sie es Again!',mtInformation,[mbOk],0);
Ausfahrt;
Ende;
Ende;

Sobald Sie mit dem Server verbunden sind, können Sie entweder die TClientSocket Sendtext oder Sendstream-Methode verwenden, die Daten an den Server senden.
zum Beispiel:
Prozedur senden;
beginnen
Überprüfung, ob die Socket-Verbindung bereit ist
Ist dies nicht der Fall, wird die Fehlerbehandlung, die Teil der TClientSocket aktiviert
Wenn csClientSocket.Active dann
beginnen
Senden den Text über die Socketverbindung
csClientSocket.Socket.SendText ('der String senden');
Setzen eines Flags zu warten, bis der Server die Antwort zurück sendet
dmDataModule.FWaiting: = True;
beim dmDataModule.FWaiting dann
Application.ProcessMessages;
Ende;
Ende;
Genießen!!!
Vielen Dank.
Magesh.









Machen einer Anwendung einen TCP/IP-Client (mit Beispiel-Code)...


Machen einer Anwendung einen TCP/IP-Client (mit Beispiel-Code)... : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Herstellen einer Verbindung zu einem TCP/IP-Server von einem Delphi-Client
Dieser Artikel ist eine Fortsetzung der vorherigen Artikel (als https://www.howtodothings.com/showarticle.asp?article=218)
sollen zeigen, wie wir die TclientSocket-Komponente in Delphi als TCP/IP Client gegen alle TCP/IP-Server nutzen können. Der Server konnte geschrieben werden, in Delphi, mit TserverSocket Komponente oder jedes Stück Code, das als eine TCP/IP-Server fungiert. In meinem Fall bin ich mit einem Java Interaktion, den Code als eine TCP/IP-Server fungiert.
In meinem Projekt ich bin nur ein Bündel von Bytes an diesen Java-Server senden und der Java-Server liest die Bytes und dabei einige Aufgaben, die eine verschiedene Reihe von Bytes als Antwort an den Delphi-Client senden.
In meinem letzten Artikel (als https://www.delphi3000.com/article.asp?id=1695) habe ich das Problem, das ich konfrontiert und eine Lösung fand ich dafür erklärt.
Lassen Sie in diesem Artikel mich einige Beispiel-Code, den ich in diesem Projekt verwendet, da einige Leute gefragt haben mir den Quellcode für diese Socket-Kommunikation per separate E-mails versenden. Ich schätze sie für ihr Interesse. Hier U fahren!! Genießen!!!
Mein Projekt benutzt fast neun Formen und alle Formulare müssen mindestens einmal mit dem Java-Server interagieren. Also habe ich ein DataModule hinzugefügt und setzen Sie dort ein TClientSocket-Komponente:
Im folgenden ist der Code dafür:
Einheit DataMod;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Graphics, Steuerelemente, Formulare, Dialoge,
ScktComp, OleServer;
Typ
TdmDataModule = class(TDataModule)
CsClientSocket: TClientSocket;
Procedure CsClientSocketError (Sender: TObject; Sockel: TCustomWinSocket; ErrorEvent: TErrorEvent; Var ErrorCode: Integer);
Procedure CsClientSocketRead (Sender: TObject;
Sockel: TCustomWinSocket);
Prozedur DataModuleDestroy(Sender: TObject);
Private
{Private Deklarationen}
Kneipe
lic
FWaiting: Boolean;
{Public Deklarationen}
Ende;
var
DmDataModule: TdmDataModule;
Umsetzung
{$R *. DFM}
Procedure TdmDataModule.csClientSocketRead (Sender: TObject;
Sockel: TCustomWinSocket);
Lesen von Daten zurück von Serversocket thro
var
Puffer: Array [0..4095] char;
BytesReceived: Integer;
MemoryStream: TMemoryStream;
beginnen
während der FWaiting zu tun
beginnen
MemoryStream: = TMemoryStream.Create;
versuchen Sie
Diese zeitliche Verzögerung hängt von den Netzwerkverkehr und du kannst auch die Zeitverzögerung zwischen mal gelesen
Ich habe gerade einige 200 Millisekunden für meine Anwendung setzen, bevor es vom Server lesen beginnt.
Sleep(200);
Während echte tun
beginnen
BytesReceived: = Socket.ReceiveBuf(Buffer,SizeOf(Buffer));
Wenn (BytesReceived < = 0) dann
Pause
sonst
beginnen
MemoryStream.Write(Buffer,BytesReceived);
Ende;
Ende;
FWaiting: = False;
MemoryStream.Position: = 0;
XMLResponse ist eine globale Stringlist verwende ich in meiner Anwendung die empfangenen Bytes in Zeichenfolge konvertieren
Andere Möglichkeiten, um den Inhalt eines Memorystream können Sie
XMLResponse.LoadFromStream(MemoryStream);
Schließlich
MemoryStream.Free;
Ende;
Ende;
Ende;
Procedure TdmDataModule.csClientSocketError (Sender: TObject;
Sockel: TCustomWinSocket; ErrorEvent: TErrorEvent;
Var ErrorCode: Integer);

{Wenn Sie einen bestimmten Typ von Fehler zu bekommen, während der Client ausgeführt wird Ihnen ein Messagedlg zeigen, dass der Fehler aufgetreten ist, zu diesem Zeitpunkt müssen Sie überprüfen, ob der Server korrekt oder nicht ausgeführt wird und bei Bedarf den Server ordnungsgemäß ausgeführt und dann sagen OK machen.
CsClientSocket.Open versuchen dann zum Server wiederherstellen. Wenn eine Transaktion in der Mitte ist müssen Sie also zu diesem Zeitpunkt das gleiche Material wieder nach dem Wiederverbinden senden.}
beginnen
RS ErrorEvent von
EeGeneral:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server! ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeConnect:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeSend:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeReceive:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
EeAccept:
beginnen
Wenn MessageDlg (' Fehler beim Verbinden mit Java-Server? ' + #13 + 'Überprüfen des Serverstatus und versuchen wieder!!', mtInformation,[mbOk],0) = MrOk then
csClientSocket.Open
Ende;
Ende;
Ende;
Prozedur TdmDataModule.DataModuleDestroy(Sender: TObject);
beginnen
Die Socketverbindung schließen
csClientSocket.Close;
Ende;
Ende.
Wenn Sie mit dem Datamodule fertig sind, können Sie diese Datamodule in Einheiten aufnehmen, wo Sie brauchen, um die Interaktion mit dem Server und damit können Sie vermeiden, Schreiben von Code zum Lesen von Daten vom Server an verschiedenen Stellen des Projekts.
Sie können die Host-Adresse und Portnummer des Servers zur Kommunikation während der Laufzeit durch die Common Language Runtime-Parameter festlegen. (Ich nehme an Delphi Menschen bewusst, dass Laufzeitparameter)
Dann in das Projekt des Hauptformulars Formcreate Ereignis; Schreiben Sie den folgenden Code zum Herstellen einer Verbindung mit des Servers. d.h. die IP-Adresse und Portnummer des Servers in der TClientSocket-Komponente und Set Active auf True festlegen.
Verbinden mit dem Java-Server einen bestimmten Port
versuchen Sie
mit dmDataModule.csClientSocket-do
beginnen
Wenn aktiv, dann Active: = False;
Immer die Adresse oder den Hostnamen des Servers durch die Common Language Runtime-Parameter
Host: = ParamStr(1);
Immer die Port-Nummer des Servers, der Server überwacht, durch die Common Language Runtime-Parameter
Port: = StrToInt(ParamStr(2));
Herstellen der Verbindung aktiv
Aktive: = True;
Ende;
außer auf ESocketError Do
beginnen
MessageDlg ('Keine Verbindung zum Server Java' + #13 + ' Bitte versuchen Sie es Again!',mtInformation,[mbOk],0);
Ausfahrt;
Ende;
Ende;

Sobald Sie mit dem Server verbunden sind, können Sie entweder die TClientSocket Sendtext oder Sendstream-Methode verwenden, die Daten an den Server senden.
zum Beispiel:
Prozedur senden;
beginnen
Überprüfung, ob die Socket-Verbindung bereit ist
Ist dies nicht der Fall, wird die Fehlerbehandlung, die Teil der TClientSocket aktiviert
Wenn csClientSocket.Active dann
beginnen
Senden den Text über die Socketverbindung
csClientSocket.Socket.SendText ('der String senden');
Setzen eines Flags zu warten, bis der Server die Antwort zurück sendet
dmDataModule.FWaiting: = True;
beim dmDataModule.FWaiting dann
Application.ProcessMessages;
Ende;
Ende;
Genießen!!!
Vielen Dank.
Magesh.


Machen einer Anwendung einen TCP/IP-Client (mit Beispiel-Code)...

Machen einer Anwendung einen TCP/IP-Client (mit Beispiel-Code)... : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Machen einer Anwendung einen TCP/IP-Client (mit Beispiel-Code)...
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung