Página 2 de 2
TCP/IP NO DOS
Enviado: 18 Mai 2005 10:43
por simplicio
Cara ! eu busco isso a muito tempo ! mas eu percebi que o codigo C que o amigo mostrou acima é um extender do Cliente 32 bits da Novell for DOS, e nao vai funcionar para nos, pois precisa da novell para funcionar, ou seja ! a novell emula o TCP/IP e vc pode atribuir endereços IP virtuais para os clinetes ! mas nada mais do que uma emulação ! e só funciona no mundo da Novell. E como o vmars para linux que emula uma rede Novell, ou u DOS-EMU que emula um DOS no Linux !
Mas eu vou ficar atento nesse assunto. Pois me interessa bastante. Eu estou relutando em ter que migrar meus sistemas para X-HARBOUR, mas me parece que nao vou ter jeito !
OBS.. O mesmo codigo esta em uma pasta de instalação do Cliente for DOS da Novell, que pode ser baixado gratuitamente no site da Novell.
Enviado: 21 Mai 2005 09:18
por MWAdriano
Talvez, funcione apenas com os Drivers do protocolo para o Client 32 na memória... Talvez não seja necessário ter um Servidor Netware.. ísso foi o que eu entendi...
Enviado: 24 Mai 2005 09:19
por MWAdriano
E aí?
O Cloega Wagner conseguiu compilar a função?
Se alguém conseguir, se puder me enviar o OBJ, vou testar com os drivers de placa de rede, etc...
Quem sabe a gente encontra uma solução..
Enviado: 25 Mai 2005 17:41
por rochinha
Amiguinhos
O tópico em questão foi iniciado com uma duvida de SGBD e acabou virando por TCP-IP por nossa culpa.
Mas em ralação ao problema inicial quanto a trabalhar com SGBDs de peso o nosso amigo MWAdriano poderia fazer uso do OpenPath que implementa o uso de SQL sob um protocolo IPX.
Caso deseje outras ferramentas de trabalho com BDs como SQL-Server, Sybase, Oracle, MySQL e outros em ainda usar o bom e velho Clipper pode sacar mão de usar TopConnect, Mediator e UltiRoute( talvez o de mais facil implementação ).
Quanto a compilação do arquivo de implementação TCP-IP aqui postado, caso seja necessário, descoleui recentemente o Borland C++ 3.1 e disponibilizei-o em
http://www.softclever.com/downloads/bcc31.zip
@braços :?)
Enviado: 09 Jun 2005 13:07
por kenew
Só para atualizar, alguma novidade sobre este assunto ?
Qual o TOPICO que você criou sobre o tcp ip
Enviado: 27 Set 2006 19:02
por marchiore
Favor me passar o link para o TCP IP no clipper por favor.
Enviado: 27 Set 2006 22:15
por rochinha
Amiguinhos
Este é
O FORUM de conhecimento, talvez ou com creteza o maior
knowledge base para xBase no Brasil.
Este tópico é tão antigo que eu nem lembrava de ter participado, mas ai vai amiguinho:
http://www.codecomments.com/archive265- ... 70096.html
Codigo completo
Código: Selecionar todos
// TEST.PRG
#define NNTP_PORT 119
#define NO_ERROR 0
#define CRLF (chr(13) + chr(10))
local tmp
if tcp_open('193.110.122.97', NNTP_PORT) == NO_ERROR
? tcp_read()
// 200 nemesis.news.tpi.pl InterNetNews NNRP server INN 2.3.4 ...
tcp_write('DATE' + CRLF)
?? tmp := tcp_read()
// 111 20040902053408
?? transform(substr(tmp, 5), '@r 9999.99.99 99:99:99'), 'GMT'
tcp_write('QUIT' + CRLF)
? tcp_read()
// 205 .
tcp_close()
endif
// ...
// 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*)®s16, 0, sizeof(REGS16));
regs16.es = SELECTOROF(rm_rcb);
regs16.si = OFFSETOF (rm_rcb);
if(DosRealFarCall(TCPIPstack_entry_point
, ®s16, 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, ®s16, 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);
}
Regards
--
Franciszek Balaban
Este é o link que voce precisa para pegar o codigo na internet.
Boa sorte.
@braços :?)
CA-TOOLS
Enviado: 28 Set 2006 15:28
por Dércio_Luiz_Zanatta
Não sei se vou poder te ajudar, mas vc disse que não pode utilizar o blinker por estar usando a CA-TOOLS e essa é incompativel com o modo protegido (se entendi direito)
para isso existe uma versão da CA-TOOLS para modo protegido.. a CTP.LIB e CTUS.OBJ
Um grande abraço
Dércio Zanatta
me ajudem
Enviado: 04 Out 2006 16:21
por marchiore
Estou precisando fazer uma comunicação ponto a ponto com o CLIPPER, não tenho drive compartilhado, tenho que usar um protocolo direto, não posso usar netware, por favor me ajudem, vi algo em C com IPX serve mas não consegui funcionar com o CLIPPER, pode ser em TCP IP mas para DOS puro blz.
Por favor me ajudem, estou disposto a pagar por uma lib dessas me ajudem.