CLIPPER com TCP/IP.
Moderador: Moderadores
CLIPPER com TCP/IP.
Pessoal,
Tenho um sistema em Clipper 5.3 que faz interface com máquinas de automação, e para ísso, utilizo comunicação via porta serial. Utilizo a biblioteca CA-TOOLS para as comunicações seriais.
Ocorre que esta mesma aplicação muitas vezes precisa se comunicar com softwares de terceiros, e estes muitas vezes utilizam banco de dados relacional.
Como não disponho de nenhuma ferramenta que se comunica com estes SGDB´s, decidi fazer uma aplicação em Java que se comunique com estes bancos relacionais através de JDBC. O fato é que agora, preciso estabelecer uma comunicação entre meu sistema em Clipper e minha ferramenta Java!
Para ísso, pensei em fazer a comunicação via protocolo de rede. O fato é que a CA-TOOLS dá suporte ao IPX/SPX, que posso utilizar. Mas gostaria, por motivos óbvios, de utilizar TCP/IP no lugar.
Alguém conhece alguma ferramenta para ísso?
Obrigado!
Tenho um sistema em Clipper 5.3 que faz interface com máquinas de automação, e para ísso, utilizo comunicação via porta serial. Utilizo a biblioteca CA-TOOLS para as comunicações seriais.
Ocorre que esta mesma aplicação muitas vezes precisa se comunicar com softwares de terceiros, e estes muitas vezes utilizam banco de dados relacional.
Como não disponho de nenhuma ferramenta que se comunica com estes SGDB´s, decidi fazer uma aplicação em Java que se comunique com estes bancos relacionais através de JDBC. O fato é que agora, preciso estabelecer uma comunicação entre meu sistema em Clipper e minha ferramenta Java!
Para ísso, pensei em fazer a comunicação via protocolo de rede. O fato é que a CA-TOOLS dá suporte ao IPX/SPX, que posso utilizar. Mas gostaria, por motivos óbvios, de utilizar TCP/IP no lugar.
Alguém conhece alguma ferramenta para ísso?
Obrigado!
- vagucs
- Membro Master

- Mensagens: 1480
- Registrado em: 10 Jul 2004 10:45
- Localização: Ipanema - MG
- Contato:
Existem muitas ferramentas que disponibilizam o TCP/IP no DOS mas eu confesso que nunca consegui utilizar nenhuma, sempre alguma coisa dá errada.
Mas a solução para o seu problema se chama xHarbour, com ele vc tem acesso a bancos relacionais diretamente e acesso total ao TCP, porém seu aplicativo fica for Windows e só funcinará debaixo dele.
Você consegue o xHarbour em www.xharbour.org
Mas a solução para o seu problema se chama xHarbour, com ele vc tem acesso a bancos relacionais diretamente e acesso total ao TCP, porém seu aplicativo fica for Windows e só funcinará debaixo dele.
Você consegue o xHarbour em www.xharbour.org
Caros Amigos,
Eu consegui um código escrito em C na net, que diz ser a solução para o meu problema, porque implementa o TCP/IP dentro da aplicação Clipper.
Só existe um problema! Ela foi escrita para trabalhar com o linkeditor BLINKER, o que torna incompatível com meu sistema, porque ele tem que utilizar o Exospace, por falta de compatibilidade do Blinker com algumas funções da CA-TOOLS.
Alguém que manja de C, arriscaria uma conversão para uso com o EXOSPACE ?
obrigado...
Eu consegui um código escrito em C na net, que diz ser a solução para o meu problema, porque implementa o TCP/IP dentro da aplicação Clipper.
Só existe um problema! Ela foi escrita para trabalhar com o linkeditor BLINKER, o que torna incompatível com meu sistema, porque ele tem que utilizar o Exospace, por falta de compatibilidade do Blinker com algumas funções da CA-TOOLS.
Alguém que manja de C, arriscaria uma conversão para uso com o EXOSPACE ?
obrigado...
Se alguém quizer se aventurar e me ajudar, aqui vai...
Código: Selecionar todos
// TCPIP.C
// bcc -c -ml -w tcpip.c
// blinker ... search blxclp53 ...
#include <string.h>
#include <extend.api>
#include <blx286.h>
#define BUFF_SIZE 0x2000
#define PROTOCOL_TCP 6
#define NO_ERROR 0
#define ERR_SOCKET 100
#define ERR_NO_SOCKET 101
#define ERR_PARAMETERS 102
#define ERR_BLINKX_API 103
#define ERR_NO_TCP_STACK 104
#define ERR_POINTER 105
#define ERR_NO_POINTER 106
typedef struct
{
BYTE _dummy1[21], function, socket, error_code;
WORD port;
BYTE ip[4];
WORD _dummy2, length_of_packet, pointer;
BYTEP rm_buff;
WORD length_of_buffer;
BYTE _dummy3[120 /* ? */];
} RCB, *RCBP; // Request Control Block
extern FARP _xalloclow(WORD);
extern void _xfreelow(FARP);
extern FARP _bset(FARP, int, WORD);
HIDE REALPTR TCPIPstack_entry_point = NULL;
HIDE RCBP pm_rcb = NULL, rm_rcb;
HIDE BYTEP pm_buff, rm_buff;
HIDE BYTE socket = 0, error_code = NO_ERROR;
HIDE void near ndot2ip(BYTEP ip, BYTEP pdot)
{
int i, ch;
_bset(ip, 0, 4);
for(i = 0; i < 4; i++) do
{
if((ch = *pdot++) == '\0') return;
if(ch >= '0' && ch <= '9') ip[i] = ip[i] * 10 + ch - '0';
} while(ch != '.');
}
HIDE BOOL near rm_call(void)
{
REGS16 regs16;
pm_rcb->socket = socket;
pm_rcb->error_code = 0xff;
_bset((void*) regs16, 0, sizeof(REGS16));
regs16.es = SELECTOROF(rm_rcb);
regs16.si = OFFSETOF (rm_rcb);
if(DosRealFarCall(TCPIPstack_entry_point
, regs16, NULL, 0) != 0)
{error_code = ERR_BLINKX_API; return FALSE;}
return (error_code = pm_rcb->error_code) == 0;
HIDE BYTE near _TCP_open(void)
{
REGS16 regs16;
error_code = NO_ERROR;
if(socket != 0) return ERR_SOCKET;
if(PCOUNT < 2 || !ISCHAR(1) || !ISNUM(2)) return ERR_PARAMETERS;
regs16.ax = 0x7a40;
if(DosRealIntr(0x2f, regs16, NULL, 0) != 0) return ERR_BLINKX_API;
if((BYTE)regs16.ax != 0xff) return ERR_NO_TCP_STACK;
if((TCPIPstack_entry_point =
(REALPTR)MK_FP(regs16.es, regs16.di)) == NULL) return ERR_NO_POINTER;
if(pm_rcb != NULL) return ERR_POINTER;
if((pm_rcb = (RCBP)_xalloclow(sizeof(RCB) + BUFF_SIZE)) == NULL)
return ERR_NO_POINTER;
rm_rcb = (RCBP)DosProtToReal(pm_rcb);
pm_buff = (BYTEP)pm_rcb + sizeof(RCB);
rm_buff = (BYTEP)rm_rcb + sizeof(RCB);
_bset(pm_rcb, 0, sizeof(RCB));
pm_rcb->function = 0x11;
pm_rcb->port = PROTOCOL_TCP;
if(!rm_call()) return error_code;
if((socket = pm_rcb->socket) == 0) return ERR_NO_SOCKET;
_bset(pm_rcb, 0, sizeof(RCB));
pm_rcb->function = 4;
pm_rcb->port = ((WORD)_parni(2) >> 8) + (_parni(2) << 8);
ndot2ip(pm_rcb->ip, (BYTEP)_parc(1));
if(!rm_call()) return error_code;
return NO_ERROR;
}
HIDE void near _TCP_close(void)
{
if(socket == 0) return;
_bset(pm_rcb, 0, sizeof(RCB));
pm_rcb->function = 3;
rm_call();
socket = 0;
}
HIDE void near _TCP_free(void)
{
if(pm_rcb == NULL) return;
_xfreelow(pm_rcb);
pm_rcb = NULL;
}
CLIPPER TCP_open(void)
{
BYTE old_socket = socket, result;
RCBP old_pm_rcb = pm_rcb;
if((result = _TCP_open()) != NO_ERROR)
{
if(old_socket == 0 ) _TCP_close();
if(old_pm_rcb == NULL) _TCP_free();
}
_retni((int)(error_code = result));
}
CLIPPER TCP_read(void) // return: string + "\r\n"
{
if(socket == 0) {error_code = ERR_NO_SOCKET; _retc((BYTEP)""); return;}
_bset(pm_rcb, 0, sizeof(RCB));
pm_rcb->function = 0x12;
pm_rcb->length_of_packet = BUFF_SIZE;
pm_rcb->pointer = 1;
pm_rcb->rm_buff = rm_buff;
pm_rcb->length_of_buffer = BUFF_SIZE;
if(!rm_call()) pm_rcb->length_of_packet = 0;
pm_buff[pm_rcb->length_of_packet] = '\0';
_retc(pm_buff);
}
CLIPPER TCP_write(void)
{
if(socket == 0) {error_code = ERR_NO_SOCKET; return;}
if(PCOUNT < 1 || !ISCHAR(1)) {error_code = ERR_PARAMETERS; return;}
strcpy((char*)pm_buff, _parc(1));
_bset(pm_rcb, 0, sizeof(RCB));
pm_rcb->function = 0x14;
pm_rcb->length_of_packet = BUFF_SIZE;
pm_rcb->pointer = 1;
pm_rcb->rm_buff = rm_buff;
pm_rcb->length_of_buffer = strlen((char*)pm_buff);
rm_call();
}
CLIPPER TCP_close(void)
{
if(socket == 0) {error_code = ERR_NO_SOCKET; return;}
_TCP_close();
_TCP_free();
}
CLIPPER TCP_error(void)
{
_retni((int)error_code);
}
-
Dudu_XBase
- Membro Master

- Mensagens: 1071
- Registrado em: 25 Ago 2003 16:55
Wagner eis o tópico de clipper com TCP/IP
http://www.codecomments.com/archive265- ... 70096.html
Sobre acesso via ODBC
https://pctoledo.org/forum/viewtopic.php?t=1481
http://www.codecomments.com/archive265- ... 70096.html
Sobre acesso via ODBC
https://pctoledo.org/forum/viewtopic.php?t=1481
________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle
Então fico no aguardo.
Até lá, se alguém se interessar em compilar esta ferramenta e testar,...
Será uma mão na roda. Mas tá difíciu compilar essa coisa, porque tá dando uns paus.. Acho que é porque eu não manjo muito de C..
Até lá, se alguém se interessar em compilar esta ferramenta e testar,...
Será uma mão na roda. Mas tá difíciu compilar essa coisa, porque tá dando uns paus.. Acho que é porque eu não manjo muito de C..
Adriano da Silva
Utilizo Clipper 5.3b, _DBFCDX, EXOSPACE e CA-Tools 3.0c. (abandonando)
Harbour 3.0.0 on Linux Ubuntu 14.04LTS 64 bit.
Utilizo Clipper 5.3b, _DBFCDX, EXOSPACE e CA-Tools 3.0c. (abandonando)
Harbour 3.0.0 on Linux Ubuntu 14.04LTS 64 bit.
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:

