Hacer una solicitud de un cliente tcp/ip(con el código de ejemplo)...


Conectar a un servidor TCP/IP de un Delphi Cliente
Este artículo es una continuación de mi anterior artículo(http://www.howtodothings.com/showarticle.asp?article=218)
con la intención de demostrar cómo se puede utilizar el TclientSocket componente en Delphi como un cliente TCP/IP en contra de cualquier servidor de TCP/IP. El servidor podría ser escrito en Delphi utilizando TserverSocket componente o cualquier pieza de código que actúa como un servidor TCP/IP. En mi caso, estoy interactuando con un código de Java actúa como un servidor TCP/IP.
En mi proyecto, estoy enviando un montón de bytes para que el servidor de Java y el Java server lee los bytes y hacer algunas tareas de envío de diferentes montón de bytes como respuesta a la Delphi Cliente.
En mi último artículo (http://www.delphi3000.com/article.asp?id=1695), me explicó el problema que se enfrenta y la solución que he encontrado para que.
En este artículo, permítanme darles algunos ejemplos de código que he usado en este proyecto ya que algunas personas me pidieron que enviar el código fuente para este socket de comunicación mediante el envío de e-mails. Le agradezco por su interés. Aquí U Go!! Disfrutar!!!!
Mi proyecto utiliza casi nueve formas y en todos los formularios que necesita para interactuar con el servidor de Java al menos una vez. Así que he añadido un DataModule y poner un TClientSocket Componente allí:
El siguiente es el código para que:
unidad de DataMod
interfaz
usos
Windows, Messages, SysUtils, Classes, Graphics, Controles, Formularios, cuadros de diálogo,
ScktComp, método oleserver
tipo
TdmDataModule = clase(TDataModule)
csClientSocket: TClientSocket
procedimiento csClientSocketError(Sender: TObject Socket: TCustomWinSocket ErrorEvent: TErrorEvent var ErrorCode: Integer)
procedimiento csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
procedimiento DataModuleDestroy(Sender: TObject)
privada
{ Private declarations }
bar
lic
FWaiting : boolean
{ Public declarations }
fin
var
dmDataModule: TdmDataModule
aplicación
{$R *.DFM}
procedimiento TdmDataModule.csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
//Lectura de datos desde el servidor mediante socket
var
Buffer : array [0..4095] of char
BytesReceived : integer
MemoryStream : TMemoryStream
begin
mientras FWaiting hacer
begin
MemoryStream := TMemoryStream.Crear
prueba
//Este tiempo de retardo depende del tráfico de la red y también se puede poner el tiempo de retraso entre lee
//sólo he puesto unos 200 milisegundos para mi aplicación antes de que comience a leer desde el servidor.
Sleep(200)
while True do
begin
BytesReceived := Socket.ReceiveBuf(Buffer,SizeOf(Buffer))
si (BytesReceived <= 0) entonces
Break
else
begin
MemoryStream.Write(Buffer,BytesReceived)
fin
fin
FWaiting := False
MemoryStream.Posición := 0
//XMLResponse es un mundial fconnectionlog estoy usando en mi aplicación para convertir los bytes recibidos en cadena
//Se puede utilizar otros medios para obtener el contenido de un memorystream
XMLResponse.LoadFromStream(MemoryStream)
finalmente
MemoryStream.Libre
fin
fin
fin
procedimiento TdmDataModule.csClientSocketError(Sender: TObject
Socket: TCustomWinSocket ErrorEvent: TErrorEvent
var ErrorCode: Integer)

{Siempre que se obtenga un tipo específico de error mientras se ejecuta el cliente se le dará un messagedlg mostrando que el error se ha producido en ese momento usted tendrá que comprobar si el servidor está funcionando correctamente o no y si es necesario hacer que el servidor funcione correctamente y, a continuación, decir OK.
a Continuación, csClientSocket.Abierto intentará volver a conectarse al servidor. Así que en este tiempo si alguna transacción está en el medio, tiene que enviar las mismas cosas de nuevo después de volver a conectar.}
begin
caso ErrorEvent de
eeGeneral :
begin
si MessageDlg('Error de Conexión al servidor de Java! '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuación,
csClientSocket.Abierto
fin
eeConnect :
begin
si MessageDlg('Error de Conexión al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuación,
csClientSocket.Abierto
fin
eeSend :
begin
si MessageDlg('Error de Conexión al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuación,
csClientSocket.Abierto
fin
eeReceive :
begin
si MessageDlg('Error de Conexión al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuación,
csClientSocket.Abierto
fin
eeAccept :
begin
si MessageDlg('Error de Conexión al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuación,
csClientSocket.Abierto
fin
fin
fin
procedimiento TdmDataModule.DataModuleDestroy(Sender: TObject)
begin
//Cerrar la conexión de socket
csClientSocket.Cerrar
fin
final.
una Vez que haya terminado con el datamodule, puede incluir este datamodule en unidades de dondequiera que usted necesita para interactuar con el servidor así que usted puede evitar escribir código para leer los datos desde el servidor en varios lugares del proyecto.
Se puede configurar el Host/Dirección y Número de Puerto del servidor para comunicarse en tiempo de ejecución a través de los parámetros de tiempo de ejecución.(Supongo Delphi personas conscientes de que los parámetros de tiempo de ejecución)
a Continuación, en el proyecto del formulario principal de la formcreate evento, escribe el siguiente código para conectarse al servidor. yo.e configuración de la dirección IP y Número de Puerto del servidor en el TClientSocket componente y set Active a true.
//Conexión a la Java de servidor en un puerto en particular
prueba
con dmDataModule.csClientSocket hacer
begin
si se Activa, a continuación, Active := False
//Obtener la Dirección o el Nombre de Host del servidor a través de los parámetros de tiempo de ejecución
Host := ParamStr(1)
//Obtener el Número de Puerto del servidor en el que escucha el servidor a través de los parámetros de tiempo de ejecución
Puerto := StrToInt(ParamStr(2))
//para Hacer la conexión activa
Activo := True
fin
excepto en ESocketError hacer
begin
MessageDlg('no se puede Conectar al Servidor de Java' #13 'por Favor, Inténtelo de Nuevo!',mtInformation,[mbOk],0)
salir
fin
fin

una Vez conectado al servidor, puede utilizar el TClientSocket del sendtext o sendstream método para enviar los datos al servidor.
por ejemplo:
procedimiento de Enviar
begin
//Comprobar si la conexión de socket está listo o no
//Si no , el error de manipulación de parte de la TClientSocket será activado
si csClientSocket.Activa,
begin
//Enviar el texto a través de la conexión de socket
csClientSocket.Zócalo.SendText ('La cadena a enviar')
//Establecer un indicador que esperar hasta que el servidor envía la respuesta de vuelta
dmDataModule.FWaiting := True
mientras dmDataModule.FWaiting, a continuación,
Aplicación.ProcessMessages
fin
fin
Disfrutar!!!!
Gracias.
Magesh.









Hacer una solicitud de un cliente tcp/ip(con el codigo de ejemplo)...


Hacer una solicitud de un cliente tcp/ip(con el codigo de ejemplo)... : Multi-millones de consejos para hacer su vida mas facil.


Conectar a un servidor TCP/IP de un Delphi Cliente
Este articulo es una continuacion de mi anterior articulo(http://www.howtodothings.com/showarticle.asp?article=218)
con la intencion de demostrar como se puede utilizar el TclientSocket componente en Delphi como un cliente TCP/IP en contra de cualquier servidor de TCP/IP. El servidor podria ser escrito en Delphi utilizando TserverSocket componente o cualquier pieza de codigo que actua como un servidor TCP/IP. En mi caso, estoy interactuando con un codigo de Java actua como un servidor TCP/IP.
En mi proyecto, estoy enviando un monton de bytes para que el servidor de Java y el Java server lee los bytes y hacer algunas tareas de envio de diferentes monton de bytes como respuesta a la Delphi Cliente.
En mi ultimo articulo (http://www.delphi3000.com/article.asp?id=1695), me explico el problema que se enfrenta y la solucion que he encontrado para que.
En este articulo, permitanme darles algunos ejemplos de codigo que he usado en este proyecto ya que algunas personas me pidieron que enviar el codigo fuente para este socket de comunicacion mediante el envio de e-mails. Le agradezco por su interes. Aqui U Go!! Disfrutar!!!!
Mi proyecto utiliza casi nueve formas y en todos los formularios que necesita para interactuar con el servidor de Java al menos una vez. Asi que he añadido un DataModule y poner un TClientSocket Componente alli:
El siguiente es el codigo para que:
unidad de DataMod
interfaz
usos
Windows, Messages, SysUtils, Classes, Graphics, Controles, Formularios, cuadros de dialogo,
ScktComp, metodo oleserver
tipo
TdmDataModule = clase(TDataModule)
csClientSocket: TClientSocket
procedimiento csClientSocketError(Sender: TObject Socket: TCustomWinSocket ErrorEvent: TErrorEvent var ErrorCode: Integer)
procedimiento csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
procedimiento DataModuleDestroy(Sender: TObject)
privada
{ Private declarations }
bar
lic
FWaiting : boolean
{ Public declarations }
fin
var
dmDataModule: TdmDataModule
aplicacion
{$R *.DFM}
procedimiento TdmDataModule.csClientSocketRead(Sender: TObject
Socket: TCustomWinSocket)
//Lectura de datos desde el servidor mediante socket
var
Buffer : array [0..4095] of char
BytesReceived : integer
MemoryStream : TMemoryStream
begin
mientras FWaiting hacer
begin
MemoryStream := TMemoryStream.Crear
prueba
//Este tiempo de retardo depende del trafico de la red y tambien se puede poner el tiempo de retraso entre lee
//solo he puesto unos 200 milisegundos para mi aplicacion antes de que comience a leer desde el servidor.
Sleep(200)
while True do
begin
BytesReceived := Socket.ReceiveBuf(Buffer,SizeOf(Buffer))
si (BytesReceived <= 0) entonces
Break
else
begin
MemoryStream.Write(Buffer,BytesReceived)
fin
fin
FWaiting := False
MemoryStream.Posicion := 0
//XMLResponse es un mundial fconnectionlog estoy usando en mi aplicacion para convertir los bytes recibidos en cadena
//Se puede utilizar otros medios para obtener el contenido de un memorystream
XMLResponse.LoadFromStream(MemoryStream)
finalmente
MemoryStream.Libre
fin
fin
fin
procedimiento TdmDataModule.csClientSocketError(Sender: TObject
Socket: TCustomWinSocket ErrorEvent: TErrorEvent
var ErrorCode: Integer)

{Siempre que se obtenga un tipo especifico de error mientras se ejecuta el cliente se le dara un messagedlg mostrando que el error se ha producido en ese momento usted tendra que comprobar si el servidor esta funcionando correctamente o no y si es necesario hacer que el servidor funcione correctamente y, a continuacion, decir OK.
a Continuacion, csClientSocket.Abierto intentara volver a conectarse al servidor. Asi que en este tiempo si alguna transaccion esta en el medio, tiene que enviar las mismas cosas de nuevo despues de volver a conectar.}
begin
caso ErrorEvent de
eeGeneral :
begin
si MessageDlg('Error de Conexion al servidor de Java! '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuacion,
csClientSocket.Abierto
fin
eeConnect :
begin
si MessageDlg('Error de Conexion al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuacion,
csClientSocket.Abierto
fin
eeSend :
begin
si MessageDlg('Error de Conexion al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuacion,
csClientSocket.Abierto
fin
eeReceive :
begin
si MessageDlg('Error de Conexion al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuacion,
csClientSocket.Abierto
fin
eeAccept :
begin
si MessageDlg('Error de Conexion al servidor de Java? '#13 'Comprobar el estado del servidor y vuelve a intentarlo!!', mtInformation,[mbOk],0) = mrOk, a continuacion,
csClientSocket.Abierto
fin
fin
fin
procedimiento TdmDataModule.DataModuleDestroy(Sender: TObject)
begin
//Cerrar la conexion de socket
csClientSocket.Cerrar
fin
final.
una Vez que haya terminado con el datamodule, puede incluir este datamodule en unidades de dondequiera que usted necesita para interactuar con el servidor asi que usted puede evitar escribir codigo para leer los datos desde el servidor en varios lugares del proyecto.
Se puede configurar el Host/Direccion y Numero de Puerto del servidor para comunicarse en tiempo de ejecucion a traves de los parametros de tiempo de ejecucion.(Supongo Delphi personas conscientes de que los parametros de tiempo de ejecucion)
a Continuacion, en el proyecto del formulario principal de la formcreate evento, escribe el siguiente codigo para conectarse al servidor. yo.e configuracion de la direccion IP y Numero de Puerto del servidor en el TClientSocket componente y set Active a true.
//Conexion a la Java de servidor en un puerto en particular
prueba
con dmDataModule.csClientSocket hacer
begin
si se Activa, a continuacion, Active := False
//Obtener la Direccion o el Nombre de Host del servidor a traves de los parametros de tiempo de ejecucion
Host := ParamStr(1)
//Obtener el Numero de Puerto del servidor en el que escucha el servidor a traves de los parametros de tiempo de ejecucion
Puerto := StrToInt(ParamStr(2))
//para Hacer la conexion activa
Activo := True
fin
excepto en ESocketError hacer
begin
MessageDlg('no se puede Conectar al Servidor de Java' #13 'por Favor, Intentelo de Nuevo!',mtInformation,[mbOk],0)
salir
fin
fin

una Vez conectado al servidor, puede utilizar el TClientSocket del sendtext o sendstream metodo para enviar los datos al servidor.
por ejemplo:
procedimiento de Enviar
begin
//Comprobar si la conexion de socket esta listo o no
//Si no , el error de manipulacion de parte de la TClientSocket sera activado
si csClientSocket.Activa,
begin
//Enviar el texto a traves de la conexion de socket
csClientSocket.Zocalo.SendText ('La cadena a enviar')
//Establecer un indicador que esperar hasta que el servidor envia la respuesta de vuelta
dmDataModule.FWaiting := True
mientras dmDataModule.FWaiting, a continuacion,
Aplicacion.ProcessMessages
fin
fin
Disfrutar!!!!
Gracias.
Magesh.


Hacer una solicitud de un cliente tcp/ip(con el código de ejemplo)...

Hacer una solicitud de un cliente tcp/ip(con el código de ejemplo)... : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación