La redéfinition de client tcp/ip...


Comment créer un Serveur TCP/IP/Client en Delphi?
Cet article est une version redéfinie de mon précédent article
(http://www.howtodothings.com/showarticle.asp?article=220 la présentation d'une demande d'un Client TCP/IP (avec des exemples de code)...). Peut-être que c'est de la fin, mais j'espère que c'est utile. Dans cet article, j'ai essayé d'expliquer et de discuter, en général, comment créer TCP-IP des clients et des serveurs avec Delphi.
Ce que j'ai essayé de démontrer dans cet exemple de code?
j'ai essayé de démontrer une simple TCP-IP application client qui se connecte à un port spécifique sur un réseau TCP-IP serveur et d'échange des données. Je n'ai pas dit rien sur le serveur, sauf que ma demande était en train de parler d'un réseau TCP-IP serveur écrit en Java. Mais tous vous avez besoin de parler à un serveur est l'adresse/l'hôte et le port/service de détails. Et de communication avec le serveur, vous devez vous assurer que le serveur est en cours d'exécution. C'est tout. Vous n'avez pas besoin de s'inquiéter sur la façon dont le serveur est mis en œuvre à moins que vous souhaitez vous développer à la fois le serveur et le client par vous-même. Dans cet article, laissez-moi vous donner un bref aperçu de comment écrire un TCP-IP serveur en Delphi.
c'est Ce que j'ai fait dans le code source:
1.La connexion au serveur lorsque l'application démarre.
2.Utilisé une SendXml procédure pour envoyer des données au serveur.
3.Utilisé OnClientSocketRead événement de lire les données à partir du serveur.
4.Utilisé OnClientSocketError événement pour rattraper les erreurs
Vous verrez un indicateur Booléen appelé fWaiting dans les deux SendXml et OnClientSocketRead procédures. Dans mon application, je vais envoyer des données au serveur et attendre que le serveur à répondre de nouveau. Je vais attendre pour le OnClientSocketRead événement à se produire en espérant que le serveur répond le plus vite possible. C'est la raison que j'ai utilisé l'indicateur Booléen fWaiting.
par Où commencer pour avoir une idée de ce que le protocole TCP-IP et client TCP-IP serveur?
Pour les personnes qui veulent essayer, je vous suggère d'avoir un regard sur le projet de démonstration de discussion.rmr de Delphi 5 et 6. Suivant les liens au projet:
Delphi 5:
C:\ Program Files\Borland\Delphi5\Demos\Internet\Chat\chat.rmr

Delphi 6:
C:\ Program Files\Borland\Delphi6\Demos\Internet\Chat\chat.rmr

Ce qui est essentiellement un TCP-IP client?
C'est une application qui se connecte à un port spécifique sur un réseau TCP-IP serveur et les échanges de données, soit sous forme d'un flux ou d'un texte.
Ce que vous avez besoin pour créer un avec Delphi?
Tous vous avez besoin est un TClientSocket composant disponible sur internet palette de définir les propriétés suivantes:
Adresse: Vous pouvez saisir l'adresse IP de TCP-IP serveur que ce client se connecte.
Host: au Lieu de l'Adresse, vous pouvez entrer un nom d'alias de l'adresse IP de l'Hôte de la propriété. Il est évident pour définir l'Adresse de l'Hôte ou de la propriété. Mais qu'advient-il si vous définissez à la fois? L'hôte de la propriété l'emporte sur la propriété de l'Adresse.
Configuration de l'Hôte de la propriété serait de mieux par rapport à l'Adresse de la propriété, puisque même si vous modifiez le protocole TCP-IP du serveur vers une autre machine ou changer l'adresse IP en quelque chose d'autre, aussi longtemps que vous gardez le nom de l'alias de même, vous êtes beaux, vous n'avez pas besoin de vous soucier de le changer sur le protocole TCP-IP client. (Même si c'est une légère surcharge de résoudre le nom d'hôte correspondant à son adresse IP, il vaut la peine de l'avoir)
Port: C'est un entier valide le numéro de port TCP-IP serveur est à l'écoute. (et y répond.) C'est toujours un nombre fixe attribuée par le serveur. Pour ce numéro de port, le client va se connecter et d'envoyer et de recevoir des données.
Service: en tant Qu'Hôte et de l'Adresse de propriétés sont reliées entre elles dans un sens, le Port et les propriétés du Service sont également liés. En général, le Service est quelque chose de TCP-IP serveur peut fournir à ses clients comme http, ftp. Ces services standard qui a été attribué un numéro de port spécifique sur le serveur. (par exemple, http port 80). Comment cela fonctionne? Sur le serveur, il existe un fichier des services de cartes de services à leurs ports respectifs. Alors comme ça, vous pouvez avoir votre propre description de service qui correspond à un numéro de port spécifique sur le serveur. Dans ce cas, le client peut se connecter au service à l'aide de la propriété de Service et d'interagir.

Typeclient: Cette propriété détermine si l'interaction entre le serveur et le client se produit de manière synchrone ou asynchrone.
ctNonBlocking - La valeur par défaut. Cela indique que l'interaction entre le serveur et le client se produit de manière asynchrone. par exemple, le client peut envoyer des données au serveur et d'attendre le OnRead de données à chaque fois que les données sont envoyées depuis le serveur.
ctBlocking - Ceci est utilisé pour l'interaction à se produire de façon synchrone entre le serveur et le client.
le moment de faire le code client thread-safe?
Si plus d'une demande est envoyée au serveur un client demande à un moment, puis le code du client doit être thread-safe. Sinon, la requête-réponse peuvent entrer en collision.
le moment de faire le code du serveur thread-safe?
Si plus d'une demande est envoyée au serveur, soit à partir de d'une application client ou différentes applications client à un moment, puis le code du serveur doit être thread-safe. Ceci est applicable à tous les TCP-IP des serveurs écrits dans d'autres langues également.
j'Espère que je fais moi-même clair sur le thread-safe.
quel est le meilleur endroit pour mettre le TClientSocket composant dans une application?
Vous pouvez mettre le composant soit dans un Formulaire ou un DataModule. Si vous avez juste un formulaire unique dans l'application cliente qui parle à un serveur, puis c'est correct de mettre que TClientSocket composant de ce formulaire. Mais si vous avez de nombreuses formes dans l'application cliente, alors il est préférable de placer le composant dans un DataModule et de l'utilisation que DataModule où il est nécessaire. J'ai utilisé un DataModule dans mon application cliente depuis que j'ai eu beaucoup de formes de parler au serveur à un autre point de temps.
Comment établir une connexion au serveur?
Définir toutes les propriétés mentionnées ci-dessus, puis définissez la propriété Active à true ou à l'appel de la méthode Open. Une fois que vous établissez une connexion, vous pouvez envoyer les données à l'aide soit de la SendText ou SendStream méthode. Et vous pouvez utiliser le OnClientSocketRead événement pour lire les données depuis le serveur.
qu'est Ce qu'un TCP-IP serveur?
C'est une application qui écoute sur un port particulier et répond aux clients. Il pourrait être n'importe quel standard de serveurs http, ftp ou un serveur personnalisé pour votre application spécifique.
de Quoi avez-vous besoin de créer avec Delphi?
Comme avec le client, vous avez besoin d'un TServerSocket composant avec les propriétés suivantes définies:
Port: Vous pouvez assigner n'importe quel entier valide. À ce port, le client peut se connecter et d'interagir avec le serveur.
Service: Comme je l'ai dit précédemment, vous pouvez avoir un nom de service associé à un numéro de port.
Chaque fois que nous disons serveur, il doit être en mesure de servir plus d'un client, évidemment, puis seulement il est logique d'avoir un serveur. Droit? Maintenant, la question suivante est de savoir comment ces clients sont en train de parler sur le serveur: plus d'un client à un moment ou à un client à la fois. Elle conduit à la propriété suivante paramètre qui détermine si les clients à parler au serveur de manière synchrone ou asynchrone.
Comment pouvons-nous gérer plus d'un client demande à un moment?
La réponse est de générer un nouveau thread pour chaque demande du client. Ceci peut être atteint par la création de la ServerType propriété stThreadBlocking. Ne la ponte et de la destruction d'un thread pour chaque demande du client, des frais généraux? Oui. Évidemment. Mais si notre conception de l'application l'exige, alors il n'y a pas d'autre moyen que vous avez à ont que les frais généraux. Peut-on réduire les frais généraux de la création et de la destruction de threads? Oui. Nous le pouvons. Comment? Ces threads en Cache. Droite.
La ThreadCacheSize propriété sert à cette fin. La valeur par défaut est 10, mais cette valeur dépend de votre client besoins de l'application. Vous devez être très prudent dans la définition de cette valeur. Si vous définissez ce paramètre à une valeur maximale, vous allez vous retrouver dans des problèmes de mémoire. Si vous définissez ce paramètre à une valeur très faible, le client aura un temps d'attente pour chaque demande. Vous devez donc déterminer une meilleure valeur basée sur les statistiques de client.
Si les demandes des clients sont à venir un à un, puis vous pouvez définir les ServerType propriété stNonBlocking.
Comment lire les données à partir de la client?
Comme avec ClientSocket, nous avons OnClientRead événement à lire les données du client parmi d'autres événements.
C'est tout. J'espère que vous pouvez écrire vous-même un client et le serveur avec cette information.
Comme toujours, n'hésitez pas à partager vos points de vue, suggestions et expériences avec nos Delphi communauté.









La redefinition de client tcp/ip...


La redefinition de client tcp/ip... : Plusieurs milliers de conseils pour vous faciliter la vie.


Comment creer un Serveur TCP/IP/Client en Delphi?
Cet article est une version redefinie de mon precedent article
(http://www.howtodothings.com/showarticle.asp?article=220 la presentation d'une demande d'un Client TCP/IP (avec des exemples de code)...). Peut-etre que c'est de la fin, mais j'espere que c'est utile. Dans cet article, j'ai essaye d'expliquer et de discuter, en general, comment creer TCP-IP des clients et des serveurs avec Delphi.
Ce que j'ai essaye de demontrer dans cet exemple de code?
j'ai essaye de demontrer une simple TCP-IP application client qui se connecte a un port specifique sur un reseau TCP-IP serveur et d'echange des donnees. Je n'ai pas dit rien sur le serveur, sauf que ma demande etait en train de parler d'un reseau TCP-IP serveur ecrit en Java. Mais tous vous avez besoin de parler a un serveur est l'adresse/l'hote et le port/service de details. Et de communication avec le serveur, vous devez vous assurer que le serveur est en cours d'execution. C'est tout. Vous n'avez pas besoin de s'inquieter sur la façon dont le serveur est mis en œuvre a moins que vous souhaitez vous developper a la fois le serveur et le client par vous-meme. Dans cet article, laissez-moi vous donner un bref aperçu de comment ecrire un TCP-IP serveur en Delphi.
c'est Ce que j'ai fait dans le code source:
1.La connexion au serveur lorsque l'application demarre.
2.Utilise une SendXml procedure pour envoyer des donnees au serveur.
3.Utilise OnClientSocketRead evenement de lire les donnees a partir du serveur.
4.Utilise OnClientSocketError evenement pour rattraper les erreurs
Vous verrez un indicateur Booleen appele fWaiting dans les deux SendXml et OnClientSocketRead procedures. Dans mon application, je vais envoyer des donnees au serveur et attendre que le serveur a repondre de nouveau. Je vais attendre pour le OnClientSocketRead evenement a se produire en esperant que le serveur repond le plus vite possible. C'est la raison que j'ai utilise l'indicateur Booleen fWaiting.
par Ou commencer pour avoir une idee de ce que le protocole TCP-IP et client TCP-IP serveur?
Pour les personnes qui veulent essayer, je vous suggere d'avoir un regard sur le projet de demonstration de discussion.rmr de Delphi 5 et 6. Suivant les liens au projet:
Delphi 5:
C:\ Program Files\Borland\Delphi5\Demos\Internet\Chat\chat.rmr

Delphi 6:
C:\ Program Files\Borland\Delphi6\Demos\Internet\Chat\chat.rmr

Ce qui est essentiellement un TCP-IP client?
C'est une application qui se connecte a un port specifique sur un reseau TCP-IP serveur et les echanges de donnees, soit sous forme d'un flux ou d'un texte.
Ce que vous avez besoin pour creer un avec Delphi?
Tous vous avez besoin est un TClientSocket composant disponible sur internet palette de definir les proprietes suivantes:
Adresse: Vous pouvez saisir l'adresse IP de TCP-IP serveur que ce client se connecte.
Host: au Lieu de l'Adresse, vous pouvez entrer un nom d'alias de l'adresse IP de l'Hote de la propriete. Il est evident pour definir l'Adresse de l'Hote ou de la propriete. Mais qu'advient-il si vous definissez a la fois? L'hote de la propriete l'emporte sur la propriete de l'Adresse.
Configuration de l'Hote de la propriete serait de mieux par rapport a l'Adresse de la propriete, puisque meme si vous modifiez le protocole TCP-IP du serveur vers une autre machine ou changer l'adresse IP en quelque chose d'autre, aussi longtemps que vous gardez le nom de l'alias de meme, vous etes beaux, vous n'avez pas besoin de vous soucier de le changer sur le protocole TCP-IP client. (Meme si c'est une legere surcharge de resoudre le nom d'hote correspondant a son adresse IP, il vaut la peine de l'avoir)
Port: C'est un entier valide le numero de port TCP-IP serveur est a l'ecoute. (et y repond.) C'est toujours un nombre fixe attribuee par le serveur. Pour ce numero de port, le client va se connecter et d'envoyer et de recevoir des donnees.
Service: en tant Qu'Hote et de l'Adresse de proprietes sont reliees entre elles dans un sens, le Port et les proprietes du Service sont egalement lies. En general, le Service est quelque chose de TCP-IP serveur peut fournir a ses clients comme http, ftp. Ces services standard qui a ete attribue un numero de port specifique sur le serveur. (par exemple, http port 80). Comment cela fonctionne? Sur le serveur, il existe un fichier des services de cartes de services a leurs ports respectifs. Alors comme ça, vous pouvez avoir votre propre description de service qui correspond a un numero de port specifique sur le serveur. Dans ce cas, le client peut se connecter au service a l'aide de la propriete de Service et d'interagir.

Typeclient: Cette propriete determine si l'interaction entre le serveur et le client se produit de maniere synchrone ou asynchrone.
ctNonBlocking - La valeur par defaut. Cela indique que l'interaction entre le serveur et le client se produit de maniere asynchrone. par exemple, le client peut envoyer des donnees au serveur et d'attendre le OnRead de donnees a chaque fois que les donnees sont envoyees depuis le serveur.
ctBlocking - Ceci est utilise pour l'interaction a se produire de façon synchrone entre le serveur et le client.
le moment de faire le code client thread-safe?
Si plus d'une demande est envoyee au serveur un client demande a un moment, puis le code du client doit etre thread-safe. Sinon, la requete-reponse peuvent entrer en collision.
le moment de faire le code du serveur thread-safe?
Si plus d'une demande est envoyee au serveur, soit a partir de d'une application client ou differentes applications client a un moment, puis le code du serveur doit etre thread-safe. Ceci est applicable a tous les TCP-IP des serveurs ecrits dans d'autres langues egalement.
j'Espere que je fais moi-meme clair sur le thread-safe.
quel est le meilleur endroit pour mettre le TClientSocket composant dans une application?
Vous pouvez mettre le composant soit dans un Formulaire ou un DataModule. Si vous avez juste un formulaire unique dans l'application cliente qui parle a un serveur, puis c'est correct de mettre que TClientSocket composant de ce formulaire. Mais si vous avez de nombreuses formes dans l'application cliente, alors il est preferable de placer le composant dans un DataModule et de l'utilisation que DataModule ou il est necessaire. J'ai utilise un DataModule dans mon application cliente depuis que j'ai eu beaucoup de formes de parler au serveur a un autre point de temps.
Comment etablir une connexion au serveur?
Definir toutes les proprietes mentionnees ci-dessus, puis definissez la propriete Active a true ou a l'appel de la methode Open. Une fois que vous etablissez une connexion, vous pouvez envoyer les donnees a l'aide soit de la SendText ou SendStream methode. Et vous pouvez utiliser le OnClientSocketRead evenement pour lire les donnees depuis le serveur.
qu'est Ce qu'un TCP-IP serveur?
C'est une application qui ecoute sur un port particulier et repond aux clients. Il pourrait etre n'importe quel standard de serveurs http, ftp ou un serveur personnalise pour votre application specifique.
de Quoi avez-vous besoin de creer avec Delphi?
Comme avec le client, vous avez besoin d'un TServerSocket composant avec les proprietes suivantes definies:
Port: Vous pouvez assigner n'importe quel entier valide. A ce port, le client peut se connecter et d'interagir avec le serveur.
Service: Comme je l'ai dit precedemment, vous pouvez avoir un nom de service associe a un numero de port.
Chaque fois que nous disons serveur, il doit etre en mesure de servir plus d'un client, evidemment, puis seulement il est logique d'avoir un serveur. Droit? Maintenant, la question suivante est de savoir comment ces clients sont en train de parler sur le serveur: plus d'un client a un moment ou a un client a la fois. Elle conduit a la propriete suivante parametre qui determine si les clients a parler au serveur de maniere synchrone ou asynchrone.
Comment pouvons-nous gerer plus d'un client demande a un moment?
La reponse est de generer un nouveau thread pour chaque demande du client. Ceci peut etre atteint par la creation de la ServerType propriete stThreadBlocking. Ne la ponte et de la destruction d'un thread pour chaque demande du client, des frais generaux? Oui. Evidemment. Mais si notre conception de l'application l'exige, alors il n'y a pas d'autre moyen que vous avez a ont que les frais generaux. Peut-on reduire les frais generaux de la creation et de la destruction de threads? Oui. Nous le pouvons. Comment? Ces threads en Cache. Droite.
La ThreadCacheSize propriete sert a cette fin. La valeur par defaut est 10, mais cette valeur depend de votre client besoins de l'application. Vous devez etre tres prudent dans la definition de cette valeur. Si vous definissez ce parametre a une valeur maximale, vous allez vous retrouver dans des problemes de memoire. Si vous definissez ce parametre a une valeur tres faible, le client aura un temps d'attente pour chaque demande. Vous devez donc determiner une meilleure valeur basee sur les statistiques de client.
Si les demandes des clients sont a venir un a un, puis vous pouvez definir les ServerType propriete stNonBlocking.
Comment lire les donnees a partir de la client?
Comme avec ClientSocket, nous avons OnClientRead evenement a lire les donnees du client parmi d'autres evenements.
C'est tout. J'espere que vous pouvez ecrire vous-meme un client et le serveur avec cette information.
Comme toujours, n'hesitez pas a partager vos points de vue, suggestions et experiences avec nos Delphi communaute.


La redéfinition de client tcp/ip...

La redéfinition de client tcp/ip... : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation