La présentation d'une demande d'un client tcp/ip(avec des exemples de code)...


la Connexion à un serveur TCP/IP à partir d'un Delphi Client
Cet article est la suite de mon article précédent(http://www.howtodothings.com/showarticle.asp?article=218)
pour but de démontrer comment nous pouvons utiliser la TclientSocket composant Delphi comme un client TCP/IP à l'encontre de tout serveur TCP/IP. Le serveur peut être écrit en Delphi en utilisant TserverSocket composant ou un morceau de code qui agit comme un serveur TCP/IP. Dans mon cas, je suis d'interagir avec du code Java agit comme un serveur TCP/IP.
Dans mon projet, je suis juste en envoyant un tas d'octets que Java server et le serveur Java lit les octets et faire quelques tâches de l'envoi d'un autre tas d'octets en tant que réponse à la Delphi Client.
Dans mon dernier article (http://www.delphi3000.com/article.asp?id=1695), j'ai expliqué le problème que j'ai rencontrés, et une solution que j'ai trouvé pour cela.
Dans cet article, permettez-moi de donner un exemple de code que j'ai utilisé dans ce projet car certaines personnes m'ont demandé d'envoyer le code source de cette prise de communication par l'envoi de courriels distincts. Je les apprécie pour leurs intérêts. Ici U Go!! Profitez-en!!!
Mon projet utilise presque neuf formes et de toutes les formes nécessité d'interagir avec le serveur Java, au moins une fois. J'ai donc ajouté un DataModule et de mettre un TClientSocket Composant:
voici Le code:
unité de DataMod
interface

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, OleServer
type
TdmDataModule = classe(TDataModule)
csClientSocket: TClientSocket
procédure csClientSocketError(Sender: TObject Socket: TCustomWinSocket ErrorEvent: TErrorEvent var ErrorCode: Entier)
procédure csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
procédure DataModuleDestroy(Sender: TObject)
private
{ Private declarations }
pub
lic
FWaiting : boolean
{ déclarations Publiques }
fin
var
dmDataModule: TdmDataModule
application
{$R *.DFM}
procédure TdmDataModule.csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
//Lecture de données à partir du serveur thro socket
var
de la mémoire Tampon : array [0..4095] de char
Octetsreçus : integer
MemoryStream : TMemoryStream
begin
alors que FWaiting ne
begin
MemoryStream := TMemoryStream.Créer

//Ce délai dépend du trafic sur le réseau et vous pouvez aussi mettre le temps de retard entre le lit
//je viens de mettre quelques 200 millisecondes pour ma demande avant qu'elle commence la lecture à partir du serveur.
Sleep(200)
while True do
begin
Octetsreçus := Socket.ReceiveBuf(Buffer,SizeOf(Buffer))
if (Octetsreçus <= 0) then
Break
else
begin
MemoryStream.Write(Buffer,Octetsreçus)
fin
fin
FWaiting := False
MemoryStream.Position := 0
//XMLResponse mondial stringlist j'utilise dans mon application pour convertir les octets reçus dans la chaîne de caractères
//Vous pouvez utiliser d'autres moyens pour obtenir le contenu d'un memorystream
XMLResponse.LoadFromStream(MemoryStream)
enfin
MemoryStream.Gratuit
fin
fin
fin
procédure TdmDataModule.csClientSocketError(Sender: TObject
Socket: TCustomWinSocket ErrorEvent: TErrorEvent
var ErrorCode: Entier)

{Chaque fois que vous obtenez un type spécifique d'erreur lors de l'exécution du client, vous sera donné un messagedlg montrant que l'erreur a eu lieu à ce moment, vous avez pour vérifier si le serveur fonctionne correctement ou non et, si nécessaire, que le serveur fonctionne correctement et ensuite de dire OK.
Alors csClientSocket.Ouvrir va essayer de se reconnecter au serveur. Donc, à ce moment si certains transaction est dans le milieu, vous devez envoyer le même genre de choses nouveau après la reconnexion.}
begin
cas ErrorEvent de
eeGeneral :
begin
si MessageDlg('Erreur de Connexion à un serveur Java! '#13 'Vérifier l'état du serveur et essayez à nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeConnect :
begin
si MessageDlg('Erreur de Connexion à un serveur Java? '#13 'Vérifier l'état du serveur et essayez à nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeSend :
begin
si MessageDlg('Erreur de Connexion à un serveur Java? '#13 'Vérifier l'état du serveur et essayez à nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeReceive :
begin
si MessageDlg('Erreur de Connexion à un serveur Java? '#13 'Vérifier l'état du serveur et essayez à nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeAccept :
begin
si MessageDlg('Erreur de Connexion à un serveur Java? '#13 'Vérifier l'état du serveur et essayez à nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
fin
fin
procédure TdmDataModule.DataModuleDestroy(Sender: TObject)
begin
//Fermeture de la connexion de socket
csClientSocket.Fermer
fin
à la fin.
une Fois que vous avez terminé avec le datamodule, vous pouvez inclure cette datamodule dans les unités de l'endroit où vous devez interagir avec le serveur, vous pouvez ainsi éviter d'écrire du code pour lire les données à partir du serveur dans divers endroits du projet.
Vous pouvez définir l'Hôte ou l'Adresse et le Numéro de Port du serveur de communiquer au moment de l'exécution à travers les paramètres d'exécution.(Je suppose Delphi gens conscients des paramètres d'exécution)
Ensuite, dans le cadre du projet du formulaire principal formcreate événement écrire le code suivant pour vous connecter au serveur. j'.e réglage de l'adresse IP et Numéro de Port du serveur dans le TClientSocket composant et définir Active à true.
//Connexion au serveur de Java sur un port particulier

avec dmDataModule.csClientSocket ne
begin
si Actifs alors := False
//pour Obtenir l'Adresse ou le Nom d'Hôte du serveur par le biais des paramètres d'exécution
Hôte := ParamStr(1)
//pour Obtenir le Numéro de Port du serveur sur lequel le serveur écoute à travers les paramètres d'exécution
Port := StrToInt(ParamStr(2))
//pour Faire la connexion active
Active := True
fin
sauf sur ESocketError ne
begin
MessageDlg('Impossible de se Connecter à un Serveur Java' #13 'Veuillez réessayer!',mtInformation,[bakang],0)
sortie
fin
fin

une Fois que vous êtes connecté au serveur, vous pouvez utiliser le TClientSocket de sendtext ou sendstream méthode pour envoyer les données au serveur.
par exemple:
procédure d'Envoyer
begin
//Vérifier si la prise de connexion est prête ou pas
//sinon , le traitement des erreurs le cadre de la TClientSocket sera activé
si csClientSocket.Active, alors
begin
//Envoi du texte par le biais de la connexion de socket
csClientSocket.Socket.SendText ('La chaîne de caractères à envoyer')
//définition d'un indicateur d'attendre jusqu'à ce que le serveur envoie la réponse en retour
dmDataModule.FWaiting := True
alors que dmDataModule.FWaiting puis
Application.ProcessMessages
fin
fin
Profitez-en!!!
Merci.
Magesh.









La presentation d'une demande d'un client tcp/ip(avec des exemples de code)...


La presentation d'une demande d'un client tcp/ip(avec des exemples de code)... : Plusieurs milliers de conseils pour vous faciliter la vie.


la Connexion a un serveur TCP/IP a partir d'un Delphi Client
Cet article est la suite de mon article precedent(http://www.howtodothings.com/showarticle.asp?article=218)
pour but de demontrer comment nous pouvons utiliser la TclientSocket composant Delphi comme un client TCP/IP a l'encontre de tout serveur TCP/IP. Le serveur peut etre ecrit en Delphi en utilisant TserverSocket composant ou un morceau de code qui agit comme un serveur TCP/IP. Dans mon cas, je suis d'interagir avec du code Java agit comme un serveur TCP/IP.
Dans mon projet, je suis juste en envoyant un tas d'octets que Java server et le serveur Java lit les octets et faire quelques taches de l'envoi d'un autre tas d'octets en tant que reponse a la Delphi Client.
Dans mon dernier article (http://www.delphi3000.com/article.asp?id=1695), j'ai explique le probleme que j'ai rencontres, et une solution que j'ai trouve pour cela.
Dans cet article, permettez-moi de donner un exemple de code que j'ai utilise dans ce projet car certaines personnes m'ont demande d'envoyer le code source de cette prise de communication par l'envoi de courriels distincts. Je les apprecie pour leurs interets. Ici U Go!! Profitez-en!!!
Mon projet utilise presque neuf formes et de toutes les formes necessite d'interagir avec le serveur Java, au moins une fois. J'ai donc ajoute un DataModule et de mettre un TClientSocket Composant:
voici Le code:
unite de DataMod
interface

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, OleServer
type
TdmDataModule = classe(TDataModule)
csClientSocket: TClientSocket
procedure csClientSocketError(Sender: TObject Socket: TCustomWinSocket ErrorEvent: TErrorEvent var ErrorCode: Entier)
procedure csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
procedure DataModuleDestroy(Sender: TObject)
private
{ Private declarations }
pub
lic
FWaiting : boolean
{ declarations Publiques }
fin
var
dmDataModule: TdmDataModule
application
{$R *.DFM}
procedure TdmDataModule.csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
//Lecture de donnees a partir du serveur thro socket
var
de la memoire Tampon : array [0..4095] de char
Octetsreçus : integer
MemoryStream : TMemoryStream
begin
alors que FWaiting ne
begin
MemoryStream := TMemoryStream.Creer

//Ce delai depend du trafic sur le reseau et vous pouvez aussi mettre le temps de retard entre le lit
//je viens de mettre quelques 200 millisecondes pour ma demande avant qu'elle commence la lecture a partir du serveur.
Sleep(200)
while True do
begin
Octetsreçus := Socket.ReceiveBuf(Buffer,SizeOf(Buffer))
if (Octetsreçus <= 0) then
Break
else
begin
MemoryStream.Write(Buffer,Octetsreçus)
fin
fin
FWaiting := False
MemoryStream.Position := 0
//XMLResponse mondial stringlist j'utilise dans mon application pour convertir les octets reçus dans la chaîne de caracteres
//Vous pouvez utiliser d'autres moyens pour obtenir le contenu d'un memorystream
XMLResponse.LoadFromStream(MemoryStream)
enfin
MemoryStream.Gratuit
fin
fin
fin
procedure TdmDataModule.csClientSocketError(Sender: TObject
Socket: TCustomWinSocket ErrorEvent: TErrorEvent
var ErrorCode: Entier)

{Chaque fois que vous obtenez un type specifique d'erreur lors de l'execution du client, vous sera donne un messagedlg montrant que l'erreur a eu lieu a ce moment, vous avez pour verifier si le serveur fonctionne correctement ou non et, si necessaire, que le serveur fonctionne correctement et ensuite de dire OK.
Alors csClientSocket.Ouvrir va essayer de se reconnecter au serveur. Donc, a ce moment si certains transaction est dans le milieu, vous devez envoyer le meme genre de choses nouveau apres la reconnexion.}
begin
cas ErrorEvent de
eeGeneral :
begin
si MessageDlg('Erreur de Connexion a un serveur Java! '#13 'Verifier l'etat du serveur et essayez a nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeConnect :
begin
si MessageDlg('Erreur de Connexion a un serveur Java? '#13 'Verifier l'etat du serveur et essayez a nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeSend :
begin
si MessageDlg('Erreur de Connexion a un serveur Java? '#13 'Verifier l'etat du serveur et essayez a nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeReceive :
begin
si MessageDlg('Erreur de Connexion a un serveur Java? '#13 'Verifier l'etat du serveur et essayez a nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
eeAccept :
begin
si MessageDlg('Erreur de Connexion a un serveur Java? '#13 'Verifier l'etat du serveur et essayez a nouveau!!', mtInformation,[bakang],0) = mrOk puis
csClientSocket.Ouvert
fin
fin
fin
procedure TdmDataModule.DataModuleDestroy(Sender: TObject)
begin
//Fermeture de la connexion de socket
csClientSocket.Fermer
fin
a la fin.
une Fois que vous avez termine avec le datamodule, vous pouvez inclure cette datamodule dans les unites de l'endroit ou vous devez interagir avec le serveur, vous pouvez ainsi eviter d'ecrire du code pour lire les donnees a partir du serveur dans divers endroits du projet.
Vous pouvez definir l'Hote ou l'Adresse et le Numero de Port du serveur de communiquer au moment de l'execution a travers les parametres d'execution.(Je suppose Delphi gens conscients des parametres d'execution)
Ensuite, dans le cadre du projet du formulaire principal formcreate evenement ecrire le code suivant pour vous connecter au serveur. j'.e reglage de l'adresse IP et Numero de Port du serveur dans le TClientSocket composant et definir Active a true.
//Connexion au serveur de Java sur un port particulier

avec dmDataModule.csClientSocket ne
begin
si Actifs alors := False
//pour Obtenir l'Adresse ou le Nom d'Hote du serveur par le biais des parametres d'execution
Hote := ParamStr(1)
//pour Obtenir le Numero de Port du serveur sur lequel le serveur ecoute a travers les parametres d'execution
Port := StrToInt(ParamStr(2))
//pour Faire la connexion active
Active := True
fin
sauf sur ESocketError ne
begin
MessageDlg('Impossible de se Connecter a un Serveur Java' #13 'Veuillez reessayer!',mtInformation,[bakang],0)
sortie
fin
fin

une Fois que vous etes connecte au serveur, vous pouvez utiliser le TClientSocket de sendtext ou sendstream methode pour envoyer les donnees au serveur.
par exemple:
procedure d'Envoyer
begin
//Verifier si la prise de connexion est prete ou pas
//sinon , le traitement des erreurs le cadre de la TClientSocket sera active
si csClientSocket.Active, alors
begin
//Envoi du texte par le biais de la connexion de socket
csClientSocket.Socket.SendText ('La chaîne de caracteres a envoyer')
//definition d'un indicateur d'attendre jusqu'a ce que le serveur envoie la reponse en retour
dmDataModule.FWaiting := True
alors que dmDataModule.FWaiting puis
Application.ProcessMessages
fin
fin
Profitez-en!!!
Merci.
Magesh.


La présentation d'une demande d'un client tcp/ip(avec des exemples de code)...

La présentation d'une demande d'un client tcp/ip(avec des exemples de code)... : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation