Hálózat,változók T.Pascalban
2006-05-11T12:31:08+02:00
2006-06-05T22:27:52+02:00
2022-07-24T00:57:28+02:00
- ijavid -
Egy olyan unit-ot keresek, amivel Turbo Pascalban lehet változókat kuldeni. Vagy 20ms-enként file-t frisíteni
Mutasd a teljes hozzászólást!
Sajnálom, ha csalódást okozok neked rlblaster

Eléggé "paraszt módszer", de ez működik Turbo Pascal 7.0-ban írva Windows alatt HELYI hálózaton, viszont Interneten sajna nem

A lényeg, hogy a célgépen megosztasz egy mappát, úgy hogy a hálózati felhasználók írni és olvasni is tudják. (Windows 2k, XP, 2003 alatt: a mappa- tulajdonságok- megosztás fülén bejelölöd a "más felhasználók módosíthatják fájljaimat" jelölőnégyzetet)

Ezután még 2 dologra van szükséged:
1.) a cél számítógép Net-Bios nevére. Most legyen: 'celgep'
2.) a fenti módon megosztott mappa nevére. Most legyen: 'konyvtar'

Var st :String; T :Text; Begin { AZ ELÉRÉSI ÚT BEÁLLÍTÁSA } st:='\\celgep\konyvtar\az.txt'; { FÁJLMŰVELETEK} Assign(T,st); Rewrite(T); WriteLN(T,'Ez a kimeneti szöveg, amit a másik gépen elolvashatsz'); Close(T); { VALAMIT AZÉRT A FELHASZNÁLÓ IS KAP } WriteLN('Átvitel kész'); ReadLN; End.

Hibakezelés ugyan még nincs benne, de a programod az
{$I}
direktívával és az
IOResult
változóval már nem nagy dolog kibővíteni...
Mutasd a teljes hozzászólást!

  • Ha jól tudom, akkor nincs olyan unit Pascalban, ami képes az internetet kezelni. Illetve modemet tud, de gondolom nem erre van szükséged...
    Mutasd a teljes hozzászólást!
  • Töltsd le a FreePascalt.
    Sokban hasonlít a TP-hez és támogatást ad az alap WinSock-hoz.
    Mutasd a teljes hozzászólást!
  • nekem nem internethez kell, hanem HELYI hállóztohoz.

    nem akarom áttfordítani semmilyen más nyelvre, annyi erôvel megcsinálom delphiben DirectX-el...
    Mutasd a teljes hozzászólást!
  • Nem igazán értem, hogy mit is akarsz igazán.
    Adatokat akarsz küldeni programok között?

    Ha a file frissítés alatt azt érted, hogyan lehet azt elérni, hogy egy file nyitás lezárogatás nélkül mindig aktuális legyen, akkor a duplicate file header körül keresgess (Int21h).
    Mutasd a teljes hozzászólást!
  • akkor újra:
    Van 1 progarm Turbo Pascalban irva.
    Van 1 helyi hallozat. (pl. iskolai gépek)

    Problema:
    - hogyan kuldjek adatokat az egyik gepen futo programbol a masik gepen futoba.


    - volt egy olyan otletem hogy file-on keresztul, de 20ms-onkent kellene frissiteni és olvasni is!
    Mutasd a teljes hozzászólást!
  • nekem nem internethez kell, hanem HELYI hállóztohoz.

    Gondolod, hogy ilyen hozzaszolas utan meg kapsz valaszt? Bar kitudja...
    Mutasd a teljes hozzászólást!
  • Sajnálom, ha csalódást okozok neked rlblaster

    Eléggé "paraszt módszer", de ez működik Turbo Pascal 7.0-ban írva Windows alatt HELYI hálózaton, viszont Interneten sajna nem

    A lényeg, hogy a célgépen megosztasz egy mappát, úgy hogy a hálózati felhasználók írni és olvasni is tudják. (Windows 2k, XP, 2003 alatt: a mappa- tulajdonságok- megosztás fülén bejelölöd a "más felhasználók módosíthatják fájljaimat" jelölőnégyzetet)

    Ezután még 2 dologra van szükséged:
    1.) a cél számítógép Net-Bios nevére. Most legyen: 'celgep'
    2.) a fenti módon megosztott mappa nevére. Most legyen: 'konyvtar'

    Var st :String; T :Text; Begin { AZ ELÉRÉSI ÚT BEÁLLÍTÁSA } st:='\\celgep\konyvtar\az.txt'; { FÁJLMŰVELETEK} Assign(T,st); Rewrite(T); WriteLN(T,'Ez a kimeneti szöveg, amit a másik gépen elolvashatsz'); Close(T); { VALAMIT AZÉRT A FELHASZNÁLÓ IS KAP } WriteLN('Átvitel kész'); ReadLN; End.

    Hibakezelés ugyan még nincs benne, de a programod az
    {$I}
    direktívával és az
    IOResult
    változóval már nem nagy dolog kibővíteni...
    Mutasd a teljes hozzászólást!
  • Sajnálom, ha csalódást okozok neked rlblaster

    A fene, majd legkozelebb rlblaster. Na jo, egy picit keso van mar...

    De ez tenyleg nem a legbiztosabb modszer, bar megteszi, ha nem eletek fuggnek tole, mert gyorsan ossze lehet vagni...

    Amugy otletes gratu
    Mutasd a teljes hozzászólást!
  • Hali!

    Ha van a hálózaton IPX támogatás (novell hálózaton biztos van, de bármelyik windows-ra fel lehet telepíteni a protokoll meghajtóprogramját), akkor tudok neked adni egy komplett IPX/SPX hálózatkezelő unit-ot, forráskóddal (jól kommentezett), példaprogramokkal (chat), stb.

    Holnap (ma) este leszek itt legközelebb.

    psc.
    Mutasd a teljes hozzászólást!
  • Igen én valami ilyenre gondoltam. Megkoszonem ha elkuldened azt az unitot. (ijavid@gmail.com)

    A files megoldast en is megtudtam volna csinalni csak az szerintem nem eleg gyors... De ki kell probalni.
    Mutasd a teljes hozzászólást!
  • Hello!

    Nem a saját IPX/SPX unitomat küldöm, hanem ezt, amit a SWAG-on találtam:
    (férfiasan bevallom, hogy azért ezt, mert ez jobb, mint amit én írtam.)

    unit KJIPX; { Ken Johnson's IPX unit. Written November 19th 1996 kjohnso3@chat.carleton.ca A list of the functions/procedures and what they do: procedure closesocket(socketnum : word); Closes a socket. procedure opensocket(socketnum : word); Opens a socket procedure sendpacket(var ecbpointer); This will send a packet, the ecb and ipx records should be filled. procedure scheduleIPXevent(Var ECB;tick_tock : Word); Schedule an IPX event. Not really used that often. Procedure RelinquishControl; Give the IPX driver time to do some work procedure listenforpacket(Var ecb); This will listen for a packet but won't wait for one to be received. procedure myaddrASM(var bufferout); Get your own address function IPXinstalled : Boolean; True if IPX is installed procedure setuplistenECB(Var ecb : tecb;var ipx : tipxheader; var d : datagramrec); This sets up your Event control block to get it ready to receive data. procedure setupipxhead(contosendto : Byte;Var ipxhead : tipxheader); Sets up an ipx header procedure setupecb(con : Word;Var ecb : tecb;var ipx : tipxheader; Var d : datagramrec); Sets up ecb to send a packet procedure callint(sub : Byte;Var bufferin,bufferout); Internal function procedure getinternetaddress(con : Byte;VAr A : tinternetworkaddress); Get an internet address. If you have someones connection number, you can get their address on the network. Function compareaddress(thisone,thatone : welcomerec) : Boolean; Compare two address to see if they are the same. IF they are then CompareAddress is true. } interface uses kjnet; type TnetworkAddress=array[1..4] of byte; { hi-endian } TnodeAddress =array[1..6] of byte; { Hi-endian } TinterNetworkAddress=record net :array[1..4] of byte; {hi-lo} node :array[1..6] of byte;{hi-lo} socket:word; {lo-hi} end; welcomerec = record {just some stuff for a chat program...} name : string; a : tinternetworkaddress; con : Byte; quote : string; control : Char; end; datagramRec = array[1..546] of Byte; {where you put the data to send} tipxheader = record checksum : word; Len : word; control : byte; packettype : byte; dest, source : tinternetworkaddress; end; tfrag = record FragPtr : pointer; Size : Word; end; tECB = record Link : pointer; ESR : pointer; inuse : byte; code : byte; socketnum : word; ipxworkspace : array[1..4] of byte; driver : array[1..12] of byte; localnode : array[1..6] of byte; fragcount : word; fragdata : array[1..2] of tfrag; end; procedure closesocket(socketnum : word); procedure opensocket(socketnum : word); procedure sendpacket(var ecbpointer); procedure scheduleIPXevent(Var ECB;tick_tock : Word); Procedure RelinquishControl; procedure listenforpacket(Var ecb); procedure myaddrASM(var bufferout); function IPXinstalled : Boolean; procedure setuplistenECB(Var ecb : tecb;var ipx : tipxheader; var d : datagramrec); procedure setupipxhead(contosendto : Byte;Var ipxhead : tipxheader); procedure setupecb(con : Word;Var ecb : tecb;var ipx : tipxheader; Var d : datagramrec); procedure callint(sub : Byte;Var bufferin,bufferout); procedure getinternetaddress(con : Byte;VAr A : tinternetworkaddress); Function compareaddress(thisone,thatone : welcomerec) : Boolean; Const openuntilclosed = $ff; openuntilterminated = $00; doomsocket = $869c; filesocket = $451; novellsocket = $8000; Var sockettype : byte; result : byte; listensocket,sendon : word; implementation {---------------------------------------------------------------------------} Function compareaddress(thisone,thatone : welcomerec) : Boolean; var a : Boolean; x : byte; begin compareaddress := false; For x := 1 to 4 do if not (thisone.a.net[x] = thatone.a.net[x]) then EXit; for x := 1 to 6 do if not (thisone.a.node[x] = thatone.a.node[x]) then exit; Compareaddress := true; end; {--------------------------------------------------------------------------} procedure callint(sub : Byte;Var bufferin,bufferout);assembler; asm push ds push si {push source index as well} Mov ah,$e3 lds si,bufferin les di,bufferout int $21 pop si pop ds end; {--------------------------------------------------------------------------} procedure getinternetaddress(con : Byte;VAr A : tinternetworkaddress); type request = record len : word; sub : byte; c : byte; end; reply = record len : word; a : tinternetworkaddress; end; Var bufferin : request; bufferout : reply; begin Fillchar(bufferout,sizeof(Bufferout),0); bufferout.len := sizeof(bufferout)-2; with bufferin do begin len := 2; sub := $13; c := con; end; Callint($e3,bufferin,bufferout); Bufferout.a.socket := swap(bufferout.a.socket); move(bufferout.a,a,sizeof(a)); end; {--------------------------------------------------------------------------} function IPXinstalled : Boolean;assembler; asm mov ax,7a00h int $2f mov [byte ptr ipxinstalled],al end; {------------------------------------------------------------------------} procedure closesocket(socketnum : word); var i:word; begin i := swap(Socketnum); asm xor cx,cx mov bx,0001h mov dx,i int $7a end; end; {------------------------------------------------------------------------} procedure opensocket(socketnum : word); var i : word; begin i := swap(socketnum); asm mov bx,0000h mov dx,i mov al,sockettype int $7a mov [byte ptr result],al end; end; {------------------------------------------------------------------------} procedure sendpacket(var ecbpointer);assembler; asm mov bx,$0003 push bp les si,ecbpointer int $7a mov [byte ptr result],al pop bp end; {------------------------------------------------------------------------} procedure scheduleIPXevent(Var ECB;tick_tock : Word);assembler; asm mov bx,0005h mov ax,tick_tock les si,ECB {event control block} int $7a end; {------------------------------------------------------------------------} Procedure RelinquishControl;assembler; asm {app is idle and IPX can do work} mov bx,$000a int $7a end; {------------------------------------------------------------------------} procedure listenforpacket(Var ecb);assembler; asm mov bx,$0004 push bp les si,ecb int $7a mov [byte ptr result],al pop bp end; {------------------------------------------------------------------------} procedure myaddrASM(var bufferout);assembler; asm { push es} mov bx,0009h les si,bufferout int $7a { pop es } end; {------------------------------------------------------------------------} procedure setuplistenECB(Var ecb : tecb;var ipx : tipxheader; var d : datagramrec); var t : tnodeaddress; tick : word; dest : tinternetworkaddress; begin fillchar(ecb,sizeof(ecb),0); fillchar(ipx,sizeof(ipx),0); with ecb do begin socketnum := swap(listensocket); Fragcount := 2; fragdata[1].size := sizeof(ipx); fragdata[1].fragptr := @ipx; fragdata[2].size := sizeof(D); fragdata[2].fragptr := @d; end; end; {------------------------------------------------------------------------} procedure setupecb(con : Word;Var ecb : tecb;var ipx : tipxheader; Var d : datagramrec); var t : tnodeaddress; tick : word; begin fillchar(ecb,sizeof(ecb),0); With ecb do begin socketnum := swap(sendon); if not (Con = 0) Then Move(ipx.dest.node,localnode,sizeof(localnode)) else Fillchar(localnode,sizeof(localnode),$ff); fragcount := 2; fragdata[1].size := sizeof(tipxheader); fragdata[1].fragPTR := @(IPX);{pointer to IPX} fragdata[2].size := sizeof(d); fragdata[2].fragptr := @(d); end; end; {------------------------------------------------------------------------} procedure setupipxhead(contosendto : Byte;Var ipxhead : tipxheader); begin fillchar(ipxhead,sizeof(ipxhead),0); if not (contosendto = 0) Then getinternetaddress(contosendto,ipxhead.dest) else fillchar(ipxhead.dest.node,6,$ff); with ipxhead do begin checksum := swap(0); len := swap(sizeof(ipxhead)); dest.socket := swap(sendon); end; end; {------------------------------------------------------------------------} begin sockettype := openuntilterminated; sendon := $5678; listensocket := $5678; end.

    Kipofozhatod kicsit, mert van benne azért felesleg...
    Mutasd a teljes hozzászólást!
  • És egy példaprogram:

    unit KJIPX; { Ken Johnson's IPX unit. Written November 19th 1996 kjohnso3@chat.carleton.ca A list of the functions/procedures and what they do: procedure closesocket(socketnum : word); Closes a socket. procedure opensocket(socketnum : word); Opens a socket procedure sendpacket(var ecbpointer); This will send a packet, the ecb and ipx records should be filled. procedure scheduleIPXevent(Var ECB;tick_tock : Word); Schedule an IPX event. Not really used that often. Procedure RelinquishControl; Give the IPX driver time to do some work procedure listenforpacket(Var ecb); This will listen for a packet but won't wait for one to be received. procedure myaddrASM(var bufferout); Get your own address function IPXinstalled : Boolean; True if IPX is installed procedure setuplistenECB(Var ecb : tecb;var ipx : tipxheader; var d : datagramrec); This sets up your Event control block to get it ready to receive data. procedure setupipxhead(contosendto : Byte;Var ipxhead : tipxheader); Sets up an ipx header procedure setupecb(con : Word;Var ecb : tecb;var ipx : tipxheader; Var d : datagramrec); Sets up ecb to send a packet procedure callint(sub : Byte;Var bufferin,bufferout); Internal function procedure getinternetaddress(con : Byte;VAr A : tinternetworkaddress); Get an internet address. If you have someones connection number, you can get their address on the network. Function compareaddress(thisone,thatone : welcomerec) : Boolean; Compare two address to see if they are the same. IF they are then CompareAddress is true. } interface uses kjnet; type TnetworkAddress=array[1..4] of byte; { hi-endian } TnodeAddress =array[1..6] of byte; { Hi-endian } TinterNetworkAddress=record net :array[1..4] of byte; {hi-lo} node :array[1..6] of byte;{hi-lo} socket:word; {lo-hi} end; welcomerec = record {just some stuff for a chat program...} name : string; a : tinternetworkaddress; con : Byte; quote : string; control : Char; end; datagramRec = array[1..546] of Byte; {where you put the data to send} tipxheader = record checksum : word; Len : word; control : byte; packettype : byte; dest, source : tinternetworkaddress; end; tfrag = record FragPtr : pointer; Size : Word; end; tECB = record Link : pointer; ESR : pointer; inuse : byte; code : byte; socketnum : word; ipxworkspace : array[1..4] of byte; driver : array[1..12] of byte; localnode : array[1..6] of byte; fragcount : word; fragdata : array[1..2] of tfrag; end; procedure closesocket(socketnum : word); procedure opensocket(socketnum : word); procedure sendpacket(var ecbpointer); procedure scheduleIPXevent(Var ECB;tick_tock : Word); Procedure RelinquishControl; procedure listenforpacket(Var ecb); procedure myaddrASM(var bufferout); function IPXinstalled : Boolean; procedure setuplistenECB(Var ecb : tecb;var ipx : tipxheader; var d : datagramrec); procedure setupipxhead(contosendto : Byte;Var ipxhead : tipxheader); procedure setupecb(con : Word;Var ecb : tecb;var ipx : tipxheader; Var d : datagramrec); procedure callint(sub : Byte;Var bufferin,bufferout); procedure getinternetaddress(con : Byte;VAr A : tinternetworkaddress); Function compareaddress(thisone,thatone : welcomerec) : Boolean; Const openuntilclosed = $ff; openuntilterminated = $00; doomsocket = $869c; filesocket = $451; novellsocket = $8000; Var sockettype : byte; result : byte; listensocket,sendon : word; implementation {---------------------------------------------------------------------------} Function compareaddress(thisone,thatone : welcomerec) : Boolean; var a : Boolean; x : byte; begin compareaddress := false; For x := 1 to 4 do if not (thisone.a.net[x] = thatone.a.net[x]) then EXit; for x := 1 to 6 do if not (thisone.a.node[x] = thatone.a.node[x]) then exit; Compareaddress := true; end; {--------------------------------------------------------------------------} procedure callint(sub : Byte;Var bufferin,bufferout);assembler; asm push ds push si {push source index as well} Mov ah,$e3 lds si,bufferin les di,bufferout int $21 pop si pop ds end; {--------------------------------------------------------------------------} procedure getinternetaddress(con : Byte;VAr A : tinternetworkaddress); type request = record len : word; sub : byte; c : byte; end; reply = record len : word; a : tinternetworkaddress; end; Var bufferin : request; bufferout : reply; begin Fillchar(bufferout,sizeof(Bufferout),0); bufferout.len := sizeof(bufferout)-2; with bufferin do begin len := 2; sub := $13; c := con; end; Callint($e3,bufferin,bufferout); Bufferout.a.socket := swap(bufferout.a.socket); move(bufferout.a,a,sizeof(a)); end; {--------------------------------------------------------------------------} function IPXinstalled : Boolean;assembler; asm mov ax,7a00h int $2f mov [byte ptr ipxinstalled],al end; {------------------------------------------------------------------------} procedure closesocket(socketnum : word); var i:word; begin i := swap(Socketnum); asm xor cx,cx mov bx,0001h mov dx,i int $7a end; end; {------------------------------------------------------------------------} procedure opensocket(socketnum : word); var i : word; begin i := swap(socketnum); asm mov bx,0000h mov dx,i mov al,sockettype int $7a mov [byte ptr result],al end; end; {------------------------------------------------------------------------} procedure sendpacket(var ecbpointer);assembler; asm mov bx,$0003 push bp les si,ecbpointer int $7a mov [byte ptr result],al pop bp end; {------------------------------------------------------------------------} procedure scheduleIPXevent(Var ECB;tick_tock : Word);assembler; asm mov bx,0005h mov ax,tick_tock les si,ECB {event control block} int $7a end; {------------------------------------------------------------------------} Procedure RelinquishControl;assembler; asm {app is idle and IPX can do work} mov bx,$000a int $7a end; {------------------------------------------------------------------------} procedure listenforpacket(Var ecb);assembler; asm mov bx,$0004 push bp les si,ecb int $7a mov [byte ptr result],al pop bp end; {------------------------------------------------------------------------} procedure myaddrASM(var bufferout);assembler; asm { push es} mov bx,0009h les si,bufferout int $7a { pop es } end; {------------------------------------------------------------------------} procedure setuplistenECB(Var ecb : tecb;var ipx : tipxheader; var d : datagramrec); var t : tnodeaddress; tick : word; dest : tinternetworkaddress; begin fillchar(ecb,sizeof(ecb),0); fillchar(ipx,sizeof(ipx),0); with ecb do begin socketnum := swap(listensocket); Fragcount := 2; fragdata[1].size := sizeof(ipx); fragdata[1].fragptr := @ipx; fragdata[2].size := sizeof(D); fragdata[2].fragptr := @d; end; end; {------------------------------------------------------------------------} procedure setupecb(con : Word;Var ecb : tecb;var ipx : tipxheader; Var d : datagramrec); var t : tnodeaddress; tick : word; begin fillchar(ecb,sizeof(ecb),0); With ecb do begin socketnum := swap(sendon); if not (Con = 0) Then Move(ipx.dest.node,localnode,sizeof(localnode)) else Fillchar(localnode,sizeof(localnode),$ff); fragcount := 2; fragdata[1].size := sizeof(tipxheader); fragdata[1].fragPTR := @(IPX);{pointer to IPX} fragdata[2].size := sizeof(d); fragdata[2].fragptr := @(d); end; end; {------------------------------------------------------------------------} procedure setupipxhead(contosendto : Byte;Var ipxhead : tipxheader); begin fillchar(ipxhead,sizeof(ipxhead),0); if not (contosendto = 0) Then getinternetaddress(contosendto,ipxhead.dest) else fillchar(ipxhead.dest.node,6,$ff); with ipxhead do begin checksum := swap(0); len := swap(sizeof(ipxhead)); dest.socket := swap(sendon); end; end; {------------------------------------------------------------------------} begin sockettype := openuntilterminated; sendon := $5678; listensocket := $5678; end.

    És egy link:

    Az IPX/SPX protokollpáros - Cikkek - Prog.Hu
    Mutasd a teljes hozzászólást!
  • Volna egy 100 forintos kérdésem?

    Honnan szerzet kjnet unitot? A googlen se találtam sehol....
    (Nem függ tőle az életem, mert WinSockot használok, de azért ki szerettem volna kipróbálni)
    Mutasd a teljes hozzászólást!
  • Öööö, szóval a példaprogram:

    program ChatClient; uses crt,kjipx; procedure Abort(Msg:String); begin Writeln; Writeln(' FATAL: '+Msg); Writeln; Halt; end; procedure RestoreWindow; begin Window(1,1,80,25); end; procedure FocusEditLine; begin Window(1,25,80,25); end; var MsgWY :Byte; procedure FocusMsgWindow; begin Window(1,MsgWY,80,24); end; const id_LogIn = 1; id_LogOut = 2; id_Msg = 3; id_Extra = 4; type TLoginData = record id :Byte; User :String[20]; RequestOp :Boolean; Extra :Array[1..100] of Byte; end; TLogoutData = record id :Byte; User :String[20]; Extra :Array[1..100] of Byte; end; TChatData = record id :Byte; Sender :String[20]; Op :Boolean; Msg :String[120]; Extra :Array[1..100] of Byte; end; VAR ECB :TECB; D :DataGramRec; IPX :TIpxHeader; UN :String[20]; ChatDTA :TChatData; LginDTA :TLoginData; LgouDTA :TLogoutData; OpMode :Boolean; procedure ClearD; begin Writeln(D[1]); FillChar(D,SizeOf(D),0); end; procedure SendLogin; begin ClearD; Move(LginDTA,D,SizeOf(LginDTA)); SetupIPXHead(0,IPX); SetupECB(0,ECB,IPX,D); SendPacket(ECB); repeat RelinquishControl; until (ECB.Inuse = 00) or (KeyPressed); if KeyPressed then Abort('Login interrupted by user!'); end; procedure SendLogout; begin ClearD; LgouDTA.id:=id_LogOut; LgouDTA.User:=UN; Move(LgouDTA,D,SizeOf(LginDTA)); SetupIPXHead(0,IPX); SetupECB(0,ECB,IPX,D); SendPacket(ECB); repeat RelinquishControl; until (ECB.Inuse = 00); end; procedure SendMessage; begin ClearD; ChatDTA.id:=id_MSG; ChatDTA.Sender:=UN; ChatDTA.Op:=OpMode; Move(ChatDTA,D,SizeOf(ChatDTA)); SetupIPXHead(0,IPX); SetupECB(0,ECB,IPX,D); SendPacket(ECB); repeat RelinquishControl; until (ECB.Inuse = 00); end; procedure DisplayData; forward; procedure ListenData; begin ClearD; SetupListenECB(ECB,IPX,D); ListenForPacket(ECB); repeat RelinquishControl; until (ECB.Inuse = 00) or (KeyPressed); DisplayData; end; procedure DisplayData; function GoodInfo:Boolean; begin GoodInfo:=FALSE; if (D[1] = id_LogIn) or (D[1] = id_LogOut) or (D[1] = id_Msg) then GoodInfo:=TRUE; end; var id:Byte; begin if not GoodInfo then begin ClearD; Exit; end; case D[1] of id_LogIn :Move(D,LginDTA,SizeOf(LginDTA)); id_LogOut :Move(D,LgouDTA,SizeOf(LgouDTA)); id_Msg :Move(D,ChatDTA,SizeOf(ChatDTA)); end; id:=D[1]; FocusMsgWindow; if id = id_LogIn then begin TextAttr:=14; Write(LginDTA.User); TextAttr:=15; Writeln(' has logged in.'); if LginDTA.RequestOp then Writeln('OPMODE has enabled for his/him.') else Writeln('OPMODE has disabled for his/him.'); Writeln('HELLO, everybody!'); Exit; end; if id = id_LogOut then begin TextAttr:=4; Write(LgouDTA.User); TextAttr:=8; Writeln(' has logged out.'); Writeln('Bye, folks!'); Exit; end; if id = id_MSG then begin TextAttr:=15; Write('<'+ChatDTA.Sender+'> '); TextAttr:=7; Writeln(ChatDTA.Msg); Exit; end; end; var Quit :Boolean; C :Char; MSG :String; BEGIN TextAttr:=7; ClrScr; Writeln('Chat Client v0.1'); Writeln('--------------------------------------'); Write('Initializing network.... '); if not (IPXInstalled) then Abort('IPX not installed.'); Writeln('IPX found.'); Write('Setting up connection and opening sockets... '); { SetBroadcastMode(receiveall);} OpenSocket(SendOn); OpenSocket(ListenSocket); Writeln('Done.'); Write('Please enter your UserName: '); ReadLn(UN); if UN[1] = '@' then OpMode:=TRUE else OpMode:=FALSE; Write('Logging in, saying "Hello" to others... '); LginDTA.id:=id_LogIn; LginDTA.User:=UN; LginDTA.RequestOp:=OpMode; SendLogin; Writeln('Done.'); Write('--------------------------------------------------------------------------------'); Writeln('Chat mode activated.'); Writeln('Press ENTER to send message.'); Writeln('Press ESC to Logout and exit program.'); Write('--------------------------------------------------------------------------------'); MsgWY:=WhereY; Quit:=FALSE; MSG:=''; FocusEditLine; GotoXY(1,1); TextAttr:=15; Write(UN+' >'); TextAttr:=7; Write(MSG); repeat if KeyPressed then begin C:=ReadKey; if C = #0 then begin C:=ReadKey; end else begin case C of #13 :begin ChatDTA.Msg:=MSG; SendMessage; MSG:=''; end; #27 :Quit:=TRUE; else begin MSG:=MSG+C; if Length(MSG) > 120 then Delete(MSG,Length(MSG),1); end; end; end; FocusEditLine; TextAttr:=7; ClrScr; GotoXY(1,1); TextAttr:=15; Write(UN+' >'); TextAttr:=7; Write(MSG); end else begin ListenData; end; until Quit; SendLogout; CloseSocket(SendOn); CloseSocket(ListenSocket); RestoreWindow; GotoXY(79,25); Writeln; TextAttr:=7; Writeln('You have been logged out. Bye!'); END.
    Mutasd a teljes hozzászólást!
  • { Ken Johnson's Novell unit. kjohnso3@chat.carleton.ca Some of this stuff may/maynot work. If something doesn't, email me. } Unit kjnet; interface Var error : byte; Const week : array[0..6] of string = ('Sunday','Monday','Tuesday','Wednesday' ,'Thursday','Friday','Saturday'); personal = $05;{used for GETMESSAGE} broadcast = $01; receiveall = $00;{used for SETBROADCASTMODE} NoUsermessage = $01; StoreServerMessage = $02; StoreAllMessages = $03; type diskrec=record clockticks:longint; objectid:longint; diskspace:longint; enforced:Byte; end; diskspacerec = record len : word; clockticks : longint; id : longint; diskleft : longint; restrict : byte; end; BinderyRec = Record ID : longint; objtype : word; Name : String; objectFlag : byte; securitylevel : byte; propertyflags : byte; end; NoReturn = record{when the function call} Len : Word; {returns nothing.} End; Userrec = record Name : string; objtype : word; id : longint; logindate : string; logintime : string; weekday : string; Connection: Byte; end; procedure delnulls(var s : string); procedure Callint(Ahreg : byte;Var bufferin,bufferout; Var error : Byte); procedure getdisk(id:longint;var disk : diskrec); Procedure GetBinderyAccess(var sec : byte;var id : longint); Function upcaseStr(s : string) : String; procedure logout; function connectnum : byte; procedure setbroadcastmode(mode : byte); function Getbroadcastmode : byte; Procedure SendBroadCastMessage(Con : Byte;Message : String); Function GetMessage(Func : Byte) : String; Procedure SendPersonalMessage(Con : Byte;Message : String); procedure broadcastToConsole(message : string); function idnumber : longint; procedure Getconnectioninfo(Con : byte;Var U : userrec); function Connect2ID(Con : byte) : longint; {procedure getdiskspaceleft(id : longint;var bufferout : diskspacerec);} procedure ClearConnection(c : byte); procedure getopenfiles(c : word;var files : array of string;var numf : byte); procedure scanbindery(objID : Longint;obj : word;name1 : string; var Bin : binderyrec;var error:byte); function name2id(name : string) : longint; Function ConsoleOperator : Boolean; function fullname(Name : string) : string; procedure callFint(con : word;var bufferin,bufferout; var e : word); implementation Function fullname(Name : string) : string; Type request = record len : word; sub : byte; objtype : word; data : array[1..65] of byte; end; reply = record len : word; value : array[1..128] of Byte; s : byte; f : byte; end; var reaL:STRING; prop:string; bufferin : request; bufferout : reply; x,i : byte; Begin fillchar(Bufferin,sizeof(BUfferin),0); Fillchar(BufferOut,Sizeof(Bufferout),0); Bufferout.Len := Sizeof(BufferOut)-2; prop := 'IDENTIFICATION'; with bufferin do begin Sub := $3d; objtype := 256;{I guess tis could be different.} i := 1; bufferin.data[i] := Length(Name); for x := 1 to length(name) do begin Inc(I); bufferin.daTa[i] := ord(name[x]); end; inc(i); bufferin.data[i] := 01; inc(i); bufferin.data[i] := length(Prop); for x := 1 to length(Prop) do begin Inc(i); bufferin.data[i] := ord(prop[x]); end; end; bufferin.len := 3+I; callint($e3,Bufferin,bufferout,error); i := 1; While Not(Chr(Bufferout.value[i]) = '') and not (I = 128)do begin real[i] := Chr(Bufferout.Value[i]); Inc(I); end; real[0] := chr(I); delnulls(real); fullname:=real; End; {--------------------------------------------------------------------------} procedure getpriv(Var bufferin,bufferout;Var e : Byte);Assembler; asm push ds mov ah,$e3 lds si,bufferin les di,bufferout int $21 mov [byte ptr e],al pop ds end; {----------------------------------------------------------------------} function name2id(name : string) : longint; type request=record len:word; sub:byte; obtype:word; name:array[1..49] of char; end; reply = record len:word; id:longint; objtype:word; name : array[1..48] of char; end; var bufferin:request; bufferout:reply; x:byte; begin bufferin.len := 3+Length(name)+1; bufferin.sub:=$35; bufferin.obtype:=(256); for x := 0 to length(name) do begin bufferin.name[x+1] := name[x]; end; fillchar(bufferout,sizeof(bufferout),0); bufferout.len:=$36; callint($e3,bufferin,bufferout,error); name2id := (bufferout.id); end; {--------------------------------------------------------------------------} Function ConsoleOperator : Boolean; type request = record len : Word; Sub : Byte; end; var bufferin : request; bufferout : noreturn; begin Bufferin.len := 1; bufferin.Sub := $c8; getpriv(bufferin,bufferout,error); if error = $c6 Then consoleoperator := False else consoleoperator := true; end; {--------------------------------------------------------------------------} procedure getdisk(id:longint;var disk : diskrec); type request = record len:word; sub:byte; id1:Longint; end; reply = record len:word; a:array[1..3]of longint; enforced:byte; end; var bufferin:request; bufferout:reply; u:userrec; begin bufferin.len:=5; bufferin.sub:=$e6; bufferin.id1:=(id); fillchar(Bufferout,sizeof(bufferout),0); bufferout.len:=sizeof(bufferout)-2; callint($e3,bufferin,bufferout,error); with bufferout do begin disk.clockticks := SWAP(a[1]); disk.objectid:=SWAP(a[2]); disk.diskspace:=swap(a[3]); disk.enforced:=enforced; end; end;

    folyatatás a köv. hozzászólásban, mert nem tudtam egybe küldeni (túl hosszúnak ítélte)
    Mutasd a teljes hozzászólást!
  • {--------------------------------------------------------------------------} procedure scanbindery(objID : Longint;obj : word;name1 : string; var Bin : binderyrec;var error : byte); type request = record len : word; sub : byte; id : longint; ot : word; namelen : byte; namedata : array[1..47] of char; end; reply = record len : word; id : longint; ot : word; name : array[1..48] of char; flag : byte; lev : byte; prop : byte; end; var{this works man} bufferin : request; bufferout : reply; x,i : byte; name:string; begin name:=name1; upcaseStr(name); fillchar(Bufferin,sizeof(Bufferin),0); with bufferin do begin sub := $37; id := objid; ot := obj; i := 0; namelen := length(name); for x := 1 to length(Name) do begin inc(i); namedata[i] := name[x]; end; len := length(Name)+8; end; bufferout.len := sizeof(Bufferout)-2; callint($e3,bufferin,bufferout,error); With BUfferout do begin bin.id := id; bin.objtype := ot; for i := 1 to 48 do bin.name[i] := bufferout.name[i]; bin.name[0] := chr(i); bin.objectflag := flag; bin.securitylevel := lev; bin.propertyflags := prop; end; end; {------------------------------------------------------------------------} procedure callFint(con : word;var bufferin,bufferout; var e : word);assembler; asm push ds mov ax,$f217 mov cx,con lds si,bufferin les di,bufferout int $21 mov [word ptr e],ax pop ds end; {------------------------------------------------------------------------} procedure sortthese(num : word;B : array of byte;var files : array of string); var W,x,i : integer; len : byte; oldi : integer; begin i := 16; x := -1; repeat INC(x); files[x][0] := chr(B[i]);{length} len := b[i]; inc(i); OldI := i; for w := 1 to len do begin files[x][w] := chr(b[i]); inc(i); if oldI > i+16 Then Break; end; inc(I,16); until x = num; end; {------------------------------------------------------------------------} procedure getopenfiles(c : word;var files : array of string;var numf : byte); type request = record len : word; sub : byte; con : word; lastrec : word; end; reply = record nextrecord : word; numberofrecords : word; RawReplyData : array[1..508] of Byte; end; var bufferin : request; bufferout : reply; i,x,l : word; error : word; begin fillchar(files,sizeof(Files),0); for i := 11 to 13 do begin fillchar(Bufferin,sizeof(Bufferin),0); fillchar(Bufferout,sizeof(Bufferout),0); with bufferin do begin len := $5; sub := $eb; con := c; lastrec := $00; end; callFint(bufferin.con,bufferin,bufferout,error); if (Bufferout.numberofrecords > 0) Then begin numf := bufferout.numberofrecords; sortthese(bufferout.numberofrecords,bufferout.rawreplydata,files); exit; end; end; end; {------------------------------------------------------------------------} procedure ClearConnection(c : byte); type request = record len : word; sub : byte; con : byte; end; var bufferin : request; bufferout : noreturn; begin bufferin.len := 2; bufferin.sub := $d2; bufferin.con := c; callint($e3,bufferin,bufferout,error); end; {------------------------------------------------------------------------} function Connect2ID(Con : byte) : longint; var u : userrec; begin getconnectioninfo(con,u); connect2id := u.id; end; {------------------------------------------------------------------------} procedure getdiskspaceleft(id : longint;var bufferout : diskspacerec); type request = record len : word; sub : byte; oid : longint; end; {works. page 367} var bufferin : request; begin with bufferin do begin len := 5; sub := $e6; oid := id; end; fillchar(Bufferout,sizeof(Bufferout),0); bufferout.len := sizeof(Bufferout)-2; callint($e3,bufferin,bufferout,error); end; {------------------------------------------------------------------------} procedure delnulls(var s : string); var x : byte; temp : string; begin for x := 1 to length(S) do begin if s[x] = #0 Then Begin s[0] := chr(X-1); exit; End; end; end; {------------------------------------------------------------------------} procedure Callint(Ahreg : byte;Var bufferin,bufferout; Var error : Byte);assembler; asm xor ax,ax push ds mov ah,ahreg lds si,bufferin les di,bufferout int 21h pop ds mov [byte ptr error],al end; {------------------------------------------------------------------------} Procedure GetBinderyAccess(var sec : byte;var id : longint); Type request = record len : word; sub : byte; end; reply = record len : word; level : byte; oid : longint; end; var bufferin : request; bufferout : reply; Begin bufferin.len := 1;{page 328. works} bufferin.sub := $46; fillchar(Bufferout,sizeof(bufferout),0); bufferout.len := 5; callint($e3,bufferin,bufferout,error); sec := bufferout.level; id := bufferout.oid; End; {------------------------------------------------------------------------} Function upcaseStr(s : string) : String; var x : byte; begin for x := 1 to Length(s) do S[x] := Upcase(S[x]); upcaseStr := s; end; {------------------------------------------------------------------------} procedure logout;assembler; asm mov ah,$d7 int 21h mov [byte ptr error],al end; {------------------------------------------------------------------------} function connectnum : byte;assembler; asm mov ah,$dc int 21h{connectnum stored in al. should return} end; {------------------------------------------------------------------------} procedure setbroadcastmode(mode : byte);assembler; asm mov ah,$de mov dl,mode{page 374} int 21h end; {------------------------------------------------------------------------} function Getbroadcastmode : byte;assembler; asm mov ah,$de mov dl,$04 {page 374} int 21h{broadcastmode stored in al} end; {------------------------------------------------------------------------} Procedure SendBroadCastMessage(Con : Byte;Message : String); Type Request = Record Len : Word; sub : byte; Stuff : array[1..157] of byte; End; reply = record len : word; num : byte; list : array[1..100] of byte; end; Var Bufferin : request; bufferout : reply; i,x : byte; Begin fillchar(Bufferin,Sizeof(Bufferin),0); fillchar(BufferOut,Sizeof(BufferOut),0); With Bufferin do begin len := Length(message)+4; Sub := $00; {works. page 374} I := 1; Stuff[i] := 1;{connect num} Inc(I); Stuff[i] := Con; Inc(I); Stuff[i] := Length(Message); Inc(I); for x := 1 to Length(Message) do Begin stuff[i] := ord(Message[x]); inc(I); end; end; callInt($e1,Bufferin,Bufferout,Error); End; {------------------------------------------------------------------------} Function GetMessage(Func : Byte) : String; Type Request = Record Len : Word; Sub : Byte; End; Reply = Record Len : Word; messlen : Byte; mess : array[1..126] of byte; End; Var {page 376 & 375} Bufferin : request; BufferOut : Reply; duh,x : byte; Begin getmessage := ''; fillchar(Bufferin,Sizeof(Bufferin),0); Fillchar(Bufferout,Sizeof(Bufferout),0); Bufferin.Len := 1; Bufferin.Sub := Func;{a personal message or a broadcast message} bufferout.Len := 128; CallInt($e1,Bufferin,BufferOut,Error); duh := bufferout.messlen; getmessage[0] := chr(duh); for x := 1to duh do Getmessage[x] := chr(bufferout.mess[x]); End; {------------------------------------------------------------------------} Procedure SendPersonalMessage(Con : Byte;Message : String); Type request = Record Len : Word; Sub : Byte; Data : array[1..228] Of Byte; End; {likely works. page 375-376} Reply = Record Len : word; Num : Byte; Results : Array[1..100] of byte; End; Var Bufferin : request; Bufferout : reply; x,i : byte; Begin fillchar(Bufferin,Sizeof(Bufferin),0); Fillchar(Bufferout,Sizeof(Bufferout),0); Bufferin.sub := $04; i := 1; bufferin.data[i] := 1;{num of connections} Inc(i); Bufferin.Data[i] := Con;{which connection number?} inc(I); Bufferin.data[i] := length(message);{length of message} Inc(i); For X := 1 to Length(Message) do{actual message} Begin bufferin.data[i] := ord(message[x]); inc(i); End; Bufferin.Len := 4+Length(message); callint($e1,bufferin,bufferout,error);{call the int} End; {------------------------------------------------------------------------} procedure broadcastToConsole(message : string); Type request = record len : word; sub : byte; Messlen : byte; mess : array[1..$3c] of byte; end; var bufferin : request; bufferout : noreturn; x : byte; Begin fillchar(Bufferin,Sizeof(Bufferin),0); Fillchar(Bufferout,Sizeof(Bufferout),0); bufferin.len := 2+length(message); bufferin.sub := $09; Bufferin.messlen := Length(Message); for x := 1 to Length(Message) do Bufferin.Mess[x] := ord(message[x]); callint($e1,bufferin,bufferout,error); End; {------------------------------------------------------------------------} function idnumber : longint; var id : longint; l : byte; begin getbinderyaccess(L,id);{just uses this routine} idnumber := id; end; {------------------------------------------------------------------------} procedure Getconnectioninfo(Con : byte;Var U : userrec); type request = record len : word; {this routine} sub : byte; {will get all} connect : byte; {info about a} end; {connection..} reply = record len : word; id : longint; ot :word; stuff : array[1..48] of byte; log&
    Mutasd a teljes hozzászólást!
  • És még két, Ken Jonson által írt példaprogram:

    sendipx.pas:
    { This is a simple IPX demonstration that will send out broadcast packets. Ken Johnson Jan. 30th 1997 } uses crt,kjipx; var ecb:tecb; d:datagramrec; ipx:tipxheader; procedure main; var s:string; begin fillchar(d,sizeof(D),0); S:='This is sending broadcast packets'; Move(S,D,Ord(s[0])+1); repeat setupIPXhead(0,ipx); setupecb(0,ecb,ipx,D);{if connection is 0 then send} kjipx.Sendpacket(ecb);{broadcast packets} repeat relinquishcontrol; until (ecb.inuse = 00) or (keypressed); until keypressed; end; begin if not (ipxinstalled) then begin writeln('IPX not installed'); halt(1); end; textcolor(7);textbackground(0); clrscr; OpenSocket(ListenSocket); Main; CloseSocket(ListenSocket); end.

    recvipx.pas:
    { This is a quick little program that will listen for and then display an IPX packet. Ken Johnson Jan. 30th 1997 } uses crt,kjipx; var ecb:tecb; d:datagramrec; ipx:tipxheader; procedure showpacket; var x : Integer; begin clrscr; with ecb do begin writeln('Link: ESR: '); Writeln('Inuse flag: ',Inuse,' Code: ',Code); Writeln('Socket #: ',SocketNUM); Writeln('# of fragments ',FragCount); end; writeln;writeln; For X := 1 to Sizeof(D) DO write(Chr(D[x])); end; procedure main; var done:boolean; begin Done:=false; repeat fillchar(d,sizeof(D),0); setuplistenecb(ecb,ipx,D); kjipx.listenforpacket(ecb); repeat relinquishcontrol; until (ecb.inuse = 00) or (keypressed); showpacket; until keypressed; end; begin if not (ipxinstalled) then begin writeln('IPX not installed'); halt(1); end; textcolor(7);textbackground(0); clrscr; OpenSocket(ListenSocket); Main; CloseSocket(ListenSocket); end.

    Ja, és VIGYÁZAT!!!!
    Én legutóbb 5-6 éve programoztam IPX-et, és fontos tudni, hogy _nem_ működik úgy, hogy a sendert és a receivert egy gépen indítod el, hanem mind a kettőt _külön_ gépen kell elindítani!
    Et, ha valaki mondta volan nekem, sok szívástól megkímélt volna engem!
    TEhát a példaprogramok teszteléséhez legalább két számítógép szükséges, nem lehet a windowsban egy gépen belül, két task között adatot csrélni IPX/SPX-szel!
    (WIn95-98 alatt ebből akár komoly rendszerfagyás, sőt, az op. rendszer tartós összeomlása következett!)

    Üdv: psc.
    Mutasd a teljes hozzászólást!
  • És még valami:

    Lehet, hogy csak én voltam a béna (igaz annyira nagyon nem is próbáltam), de SPX-szel soha a b*dös életbe nem sikerült egyetlen egy byte-ot sem átküldenem. :(
    CSak kizárólag IPX-szel.
    De avval meg meg az volt a baj, hogy ha nagyon sok csomagot küldtem egymás után, akkor hajlamos volt kb. 10-20% packet loss-t generálni, helyi hálón (például ha egy fájlt akartam átküldeni, csomagokra bontva, természetesen).
    Ezért, ha neked sem sikerül az SPX-t használni, akkor kénytelen vagy az IPX-fölé egy saját "protokollt" kreálnod, ami mondjuk minden csomagot sorszámoz küldéskor, és fogadáskor figyeli ezeket a sorszámokat, és ha kiesik egy-egy sorszám (csomag), akkor azokat a csomagokat újra kéri.
    (Vagy minden csomagot nyugtázni kell, de ez több forgalmat generál - viszont egyszerűbb a megvalósítása).

    És még valami:
    Ezt mindenképp olvasd el, mert nagyon hasznos dolgok vannak benne (a forráskódot is nézd át, amit le lehet tölteni):
    Az IPX/SPX protokollpáros - Cikkek - Prog.Hu

    Üdv:
    psc.
    Mutasd a teljes hozzászólást!
  • Na, sikerült kipróbálni?
    Működik?
    Mutasd a teljes hozzászólást!
  • Hello. csak most jutottam net közelbe. Letöltöm amit küldtél, a hét folyamán (lehet hogy csak hétvégén) kipróbálom. Bár hogy ha 1 gépen nem lehet futatni receivert és sendet akkor csak suliba tudom kipróbálni...

    Nálam gyakorlatilalag 4-5 byte küldéséről lenne csak szó, nem hiszem hogy ekközben túl sok veszeteség keletkezne.

    Köszönöm szépen.
    A pont biztos a tiéd de melyik válaszra adjam? :
    Mutasd a teljes hozzászólást!
  • Megnéztem, nekem nagyjából működik, de sajna elég nagy a hibás csomag arány. 10000 csomagból 6471 ment át rendesen...
    Mutasd a teljes hozzászólást!
  • Én úgy emlékeztem, hogy olyan 10-20% körül volt...
    Hát igen, az IPX protokoll elég régi cucc...
    Szerintem nem bufferel olyan hatékonyan, mint a TCP/UDP, és ha akarsz küldeni csomagot, de még tele van a kimeneti queue, akkor eldob belőle egy-két csomagot, hogy helyet csináljon.
    Mást nem tudok elképzelni!

    Viszont ha egyszerű kis chat-programot akarsz, akkor nincs gond, mert ott nem olyan gyorsan követik egymást a csomagok - nem rémlik, hogy régen tapasztaltam volna ilyen esetben csomagvesztést (kivéve, ha kihúzódott a bnc)

    SPX-szel talán nem lenne gond, de mint mondtam, elég nehéz izgatni, meg úgy tudom, hogy az akár 40-50%-os(!) sebességcsökkenést is eredményez, mert minden egyes csomagot nyugtáz.
    (És nem holmiféle csúszóablakos módszerekkel, hanem egészen addig nem küld új csomagot, amíg a nyugta nem jött vissza az előzőről -- elképzelhető, hogy pontatlan vagyok ez ügyben, majd kijavít valaki, aki jobban ért hozzá)
    Mutasd a teljes hozzászólást!
  • Hát, akkor a suliban leszel kénytelen kipróbálni, mert egy gépen belül nem lehet adatot küldeni processek között IPX-szel.
    (Azért próbáld meg, én legutóbb Win98 alatt próbáltam.)

    Ha nem küldesz nagyon gyorsan csomagokat, akkor szerintem nem lesz veszteség.
    (Vagy ha nagyon gyorsan, sokáig kell küldözgetni 4-5byte-ot, akkor is legfeljebb bevezetsz valamilyen nyugtázást, oszt' kész.)

    psc.
    Mutasd a teljes hozzászólást!
  • 20ms szerintem elég gyors... Nállam ekkora időzítésnél volt ilyen a veszteség.
    Mutasd a teljes hozzászólást!
  • Egy gépen is kéne mennie a dolognak, csak persze két hálókártyával.
    Igaz, utoljára olyan 15 éve próbáltam ilyesmit, DOS alatt.
    Mutasd a teljes hozzászólást!
  • Hála istennek nem kell már IPX-et használnuk.

    Csak kiváncsiság képpen: ha nem teszel bele időzítést, akkor mekkora veszteséget produkál?
    (Nállam nincs fennt IPX/SPX protokoll)
    Mutasd a teljes hozzászólást!
  • Két hálókártyával soha sem próbáltam, elképzelhető, hogy menne.

    Igaz, utoljára olyan 15 éve próbáltam ilyesmit, DOS alatt.

    Igen, kb. akkori technika, de a kérdező is Turbo Pascalban dolgozik.
    ("DOS" alatt).

    Amúgy mintha hallottam volna anno DOS alá is TCP/IP stackról...
    Mutasd a teljes hozzászólást!
  • Dos alatt tuti, hogy megy, anno így szimuláltuk a hálózatot különböző driverek teszteléséhez.

    Nem tudom milyen unitok vannak TP-hez, de maga a DOS alól minden további nélkül tudsz TCP/IP protokollal csatlakozni wines hálózathoz, van free MS kliens, lehúzható az MS honlapjáról. Innentől már csak egy interface kell a pascalhoz, az meg biztos létezik.
    Mutasd a teljes hozzászólást!
  • Na, köszi az infót.

    Még amikor IPX programozására volt szükségem, akkor nem találtam rendes TCP/IP stacket, csak valami gagyit, ami az alacsony memóriából (640KB, ugye...) elfoglalt vagy 300KB-t, és ugye rezidensen futott.
    Tehát elég macerás volt.

    Az IPX azért egyszerűbb volt, mert ugye DOS-os hálózati gépeken a Novell úgy is be volt töltődve (tehát az IPX drivere is), Win95-98 alatt meg akkoriban amúgy is javallott volt az IPX/SPX-et feltenni (sok játék, program használta ezt).

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd