線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1687
推到 Plurk!
推到 Facebook!

TCP/IP mit DOS und WDosX

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-04 17:32:36 IP:61.221.xxx.xxx 未訂閱
http://www.dwp42.org/dwp/whitepapers/tcpip/index.html <!DOCTYPE HTML PUBLIC "-//SoftQuad Software//DTD HoTMetaL PRO 5.0::19981217::extensions to HTML 4.0//EN" "hmpro5.dtd">   <HTML> <HEAD> <TITLE>TCP/IP mit DOS und WDosX</TITLE> </HEAD> <BODY>

TCP/IP mit DOS und WDosX

von Immo Wache © 2001-08-13
e-Mail: immo.wache@dwp42.org
www: http://www.dwp42.org
Dieser Text kann frei weitergeben werden solange der Text unverändert bleibt. Kommentare und Korrekturen bitte an den Autor.

1. Einleitung

DOS ist bekanntlich älter als der Internet-Boom und daher leider nicht von Hause aus für die Verwendung von TCP/IP Anwendungen vorbereitet. Es existieren aber zum Glück eine Reihe von Lösungen, um diesem Mangel Abhilfe zu leisten. So liefert Microsoft für MS-DOS einen zusätzlichen TCP/IP Protokollstack mit. Im Internet finden sich auch weitere kommerzielle Lösungen, sowie Freeware- und Shareware-Programme. Das große (oder zumindest mein großes) Problem dabei ist die Verfügbarkeit einer vernünftigen Dokumentation der API, um auch von eigenen Delphi-WDOSX-Programmen aus auf den TCP/IP-Stack zugreifen zu können.
Nach längeren Recherchen und etlichen Versuchen bin ich auf dem Freeware-Sektor fündig geworden, und habe dort eine preiswerte und funktionsfähige Lösung gefunden, die allen meinen Anforderungen gerecht wird.
Damit auch Anwender, die nicht an WDOSX interessiert sind, von den folgenden Ausführungen einen Nutzen ziehen können, werde ich zunächst auf die TCP/IP-Architektur unter DOS eingehen, wie sie für die meisten Freeware-Applikationen unter DOS verwendet wird.

2. Eine offene TCP/IP-Architektur für DOS

Basis für den Anschluß eines DOS-Rechners an das Internet oder auch ein lokales Intranet sind überlicherweise Ethernet-Karten und Modems. Bekanntlich existiert hierbei eine bunte Vielfalt unterschiedlicher Fabrikate und Bauformen. Um diese auf einen gemeinsamen Nenner zu bringen bedient man sich eines sogenannten Packet Drivers, der die Verbindung zwischen der Hardware und den darüberliegenden Programmen herstellt. Packet Driver besitzen ein standardisiertes API Interface und werden üblicherweise mit allen marktüblichen Ethernet-Karten mitgeliefert. Sollten sie diese Treiberdiskette nicht mehr besitzen, so finden sich bei Crynwr [1] auch etliche freie Packet Driver für die unterschiedlichsten Netzwerkkarten.
Der Packet-Driver dient eigentlich nur für die Kommunikation über das Ethernet-Protokoll, es existieren aber auch CSLIP und PPP Packet Driver, die für die Anbindung eines Hayes kompatiblen Modems (mit den berühmten AT-Befehlen) verwendet werden können, und den übergeordneten Programmen eine Ethernet-Verbindung vorzugaukeln.
Packet-Driver werden immer als TSR-Programme geladen, d.h. nach Ausführung des Loaders verbleiben diese Programme resident im Hauptspeicher des Rechners und überwachen ständig die Ethernet-Verbindung.
Oberhalb des Packet-Drivers muss nun der eigentliche TCP/IP-Stack folgen. Hierfür existieren grundsätzlich zwei Lösungen:
  1. das Anwendungsprogramm bringt seinen eigenen TCP/IP-Stack mit (vor allem bei Programmen die mit dem WatCom C-Compiler geschrieben wurden) oder
  2. das Anwendungsprogramm kommuniziert mit einem seperaten TCP/IP-Stack der genauso wie der Packet Driver als TSR-Programm ausgelegt ist.
Die letztere Variante wird unter WDosX angewendet. Das zugehörige Programm ist der Trumpet TCP/IP Treiber [2].
Damit ergibt sich folgendes Bild für die Architektur der TCP/IP-Kommunikation (Bild 1).

Bild 1: Offene TCP/IP Architektur unter DOS
An dieser Stelle muss darauf hingewiesen werden, dass sich diese offene TCP/IP Architektur leider nicht mit der proprietären TCP/IP-Lösung von Microsoft und auch nicht mit der Netzwerkerweiterung von Windows 3.11 für Windows-Netzwerke gleichzeitig betreiben lässt. Hier gilt es also sich zu entscheiden, oder eine entsprechende Auswahl des Treibermodells über eine Batch-Datei vorzunehmen.

3. Installation des Packet Drivers

Nach erfolgreicher Installation der Ethernet-Karte im PC sollte der zugehörige Packet Driver zweckmäßigerweise mittels der AUTOEXEC.BAT geladen werden. Hierfür empfiehlt es sich, eine separate Batch-Datei aufzurufen, in die später auch der TCP/IP-Treiber mit eingebunden werden kann. Diese Batch-Datei (TCPIP.BAT) und alle zugehörigen netzwerkspezifischen Programme sollten der Übersicht halber in einem eigenen Ordner (z.B. TCPIP) untergebracht werden (Bild 2).

Bild 2: Inhalt des Ordners C:\TCPIP
Für diesen ersten Schritt sind folgende Dateien relevant:
  1. NE2100.COM (der Packet Driver für meine Netzwerkkarte)
  2. TCPIP.BAT (die Batch-Datei für den TCP/IP-Stack)
Die Batch-Datei TCPIP.BAT muss den Aufruf des Packet Drivers enthalten, oftmals zusammen mit Parametern für Interrupt, IO-Adresse und DMA-Kanal.
Bei mir lautet dieser Eintrag für eine NE2100 kompatible Karte in TCPIP.BAT:
@echo off
c:\tcpip\NE2100 0x7e 0x9 0x320 0x5
Der Parameter 0x7E bestimmt den Software-Interrupt, über den der Packet Driver von übergeordneten Programmen angesprochen wird.(im Bereich 0x60 bis 0x7e) Er kann bei einigen Packet Drivern auch weggelassen werden, dann sucht der Packet Driver selbständig einen geeigneten freien Interrupt.
Der Aufruf dieser Batch-Datei erfolgt in der AUTOEXEC.BAT sodass der Protokoll-Stack beim Start des Rechners automatisch geladen wird.
Die entsprechende Zeile in AUTOEXEC.BAT sollte damit wie folgt lauten:
...
CALL C:\TCPIP\TCPIP.BAT
...
Nach einem Neustart des DOS-Rechners sollte der Packet Driver nun geladen werden, Meldungen beim Start geben dabei Aufschluss über eventuelle Konfigurationsfehler.
Packet driver for an NE2100, version 11.3.1
Packet driver skeleton copyright 1988-93, Crynwr Software.
This program is freely copyable; source must be available; NO WARRANTY.
See the file COPYING.DOC for details; send FAX to  1-315-268-9201 for a copy.    System: [345]86 processor, ISA bus, Two 8259s
Packet driver software interrupt is 0x7E (126)
Interrupt number 0x9 (9)
I/O port 0x320 (800)
DMA number 0x5 (5)
My Ethernet address is 00:C0:36:00:0B:A6
Viele TCP/IP-Programme für DOS (nach der obigen Einteilung die Variante a), welche einen eigenen TCP/IP-Stack mitbringen, können damit nun bereits ausgeführt werden.
Soll der Rechner nicht mit einer Ethernet-Karte sondern über ein Modem direkt mit dem Internet verbunden werden, ist ein entsprechender SLIP oder PPP Packet Driver erforderlich [3]. SLIP wird hauptsächlich für die Verbindung mit UNIX-Servern verwendet, während PPP eine neuere Entwicklung darstellt, die vor allem für Windows-Clients verwendet wird. Es lassen sich natürlich auch DOS- und Linux-Rechner über dieses Protokoll anbinden. Im Download-Bereich des DNS-Bazaar-Projekts finden sich hierfür verschiedene Treiberprogramme, die für unterschiedliche ISP geeignet sind. Diese Programme stammen von [4, 5, 6]. Dabei sind oftmals entsprechende Versuche erforderlich, bis alles läuft.
Erfolg hatte ich bei meinen ISP's (T-Online und Viag Intercom) mit dem Programm DOSPPP Version 0.6 [6], dort allerdings nur mit dem Programmen aus dem enthaltenen Ordner CHAPSUPP. Eine genaue Anleitung zur Konfiguration des Treibers ist in dem Paket enthalten, nur bei meinem T-Online User Name gab es Probleme, da es ein ‚#'-Zeichen enthält. Die Lösung besteht darin, den User Name in doppelte Anführungszeichen zu setzen.
Schlechte Aussichten bestehen, falls sie eine ISDN-Karte oder ein USB-Modem verwenden möchten. Hierfür gibt es bisher leider nur wenige oder gar keine Lösungen. Falls Sie hier jedoch zwischenzeitlich eine funktionierende Lösung finden sollten, wäre ich über entsprechende Infos sehr dankbar.

4. Installation des TCP/IP Drivers

Um Programme ohne eigenen TCP/IP-Stack verwenden zu können (Variante b), muss dieser als zusätzliches TSR-Programm resident geladen werden. Diese Variante ist auch für Delphi WDosX-Programme erforderlich. Zu diesem Zweck muss das Programm NTCPDRV.EXE [2] über die Batch-Datei TCPIP.BAT geladen werden. NTCPDRV.EXE kann mit unterschiedlichen Parametern geladen werden, um die IP-Adresse, die Netzmaske und das Standard-Gateway festzulegen. Bei mir sieht die Batch-Datei hierzu wie folgt aus:
@echo off
c:\tcpip\NE2100 0x7e 0x9 0x320 0x5
c:\tcpip\NTCPDRV -ip=192.168.0.3 -netmask=255.255.255.0  -gateway=192.168.0.1 -dns=192.168.0.4 2 2 4
Zur Bedeutung der einzelnen Parameter sollten Sie die mitgelieferte README-Datei konsultieren. Auch hier müssen Sie eventuell ein wenig mit den Parametern experimentieren. Es ist auch möglich NTCPDRV.EXE ohne Parameter aufzurufen, dann werden die IP-Werte über das BOOTP-Protokoll von einem im Netzwerk vorhandenen DHCP-Server ermittelt. Diese letzte Variante bietet sich auch bei den PPP-Packet Drivern für den Modem-Anschluss an einen ISP an, da hierbei die IP-Parameter dynamisch vergeben werden.
Nach einem weiteren Neustart des DOS-Rechners sollte der TCP/IP Treiber nun geladen werden, auch hier geben die Meldungen beim Start wieder Aufschluss über eventuelle Konfigurationsfehler. Der TCP/IP Treiber zeigt hierbei auch die aktuell verwendeten IP-Parameter an. Das ist vor allem für die BOOTP-Variante zweckmäßig.
Trumpet TCP version 3.1 Interrupt = 0x60
Copyright (c) 1992 by P.R.Tattam, all rights reserved
Installing TCP
NE2100 packet driver version 11 2
Attempting BOOTP type  to abort *
My ip = 192.168.0.3 netmask = 255.255.255.0 gateway = 192.168.0.1

5. Den TCP/IP-Stack testen

Nachdem der TCP/IP-Stack installiert wurde und die entsprechenden Meldungen beim Booten des Rechners keine Fehler mehr enthalten, kommt nun der spannende Moment, wo wir unsere TCP/IP-Verbindung testen können. Zu diesem Zweck beginnen wir mit dem bekannten Ping-Programm, welches mit dem TCP/IP-Treiber mitgeliefert wird. Dieses DOS-Programm heißt hier PING2.EXE und als Parameter wird der gewünschte Zielrechner angegeben. Um bei mir also das Gateway anzupingen, ist folgender Aufruf notwendig:
C:\TCPIP>ping2 192.168.0.1
Das Ping Programm versendet nun im Sekundentakt ICMP-Pakete an den Zielrechner und zeigt die dabei zurückgesendeten Pakete und ihre Laufzeit an. Das Programm wird über die -Taste beendet.
Trumpet PING - Copyright (c) 1992 by P.R.Tattam, all rights reserved
Trying 192.168.0.1
192.168.0.1    id=   12 rtt =      0.000 period = 1000
Wenn sie eine Internet-Verbindung haben, können Sie auch einen Rechner im Internet anpingen, z.B.:
C:\TCPIP>ping2 dwp42.org
Hier sollte die Laufzeit dann natürlich etwas länger dauern.
Das zweite nützliche Programm, welches mit dem TCP/IP Treiber mitgeliefert wird, ist der FTP-Client FTP2.EXE. Hiermit können Sie Dateien über das Netzwerk senden und empfangen. Beim Aufruf muss der gewünschte FTP-Server mit angegeben werden:
C:\TCPIP>ftp2 ftp.dwp42.org
Melden Sie sich mit dem Nutzernamen ANONYMOUS und ihrer e-Mail Adresse als Passwort an. Geben Sie den Befehl HELP ein, um eine Übersicht der verfügbaren Kommandos zu erhalten. Nun können Sie im FTP-Archiv von dwp42.org stöbern und nach belieben die einzelnen Dateien herunterladen. Das FTP-Programm wird mit dem Kommando QUIT wieder verlassen.
Ein weiteres nützliches Programm ist der Telnet-Client TEL2.EXE. Hiermit können Sie eine Terminal-Sitzung bei einem entfernten UNIX-Rechner ausführen. Dazu müssen Sie natürlich einen entsprechenden Account auf diesem Rechner besitzen.
Es werden noch einige weitere Internet-Programme mit dem TCP/IP-Treiber mitgeliefert. Vielleicht finde Sie damit noch mehr interessante Anwendungsmöglichkeiten.

6. Dateitransfer mit FILELOAD

Wenn Sie mit Delphi und WDosX eigene Programme entwickeln, die nur unter reinem DOS lauffähig sind, ist ein seperater DOS-Rechner zusätzlich zum Entwicklungshost unter Windows natürlich sehr zweckmäßig. Um die Programmversionen vom Windows-Rechner zum DOS-Rechner zu übertragen, ist die FTP-Lösung leider recht umständlich in der Bedienung.
Aus diesem Grund habe ich eine einfachere Download-Möglichkeit für Programme und Dateien entwickelt welche auf der DOS-Seite z.B. in eine kleine Batch-Datei eingebunden werden kann. Diese Lösung ist Freeware und Sie können sie natürlich gerne mitnutzen.
Auf dem Windows-Rechner muss dazu das Programm FILESERV.EXE als Server gestartet werden. Auf der DOS-Seite wird die Übertragung einer Datei mit folgendem Befehl ausgelöst:
C:\TCPIP>fileload 192.168.0.2 filename.ext
Hierbei muss als erster Parameter die IP-Adresse des Servers angegeben werden. Damit kann man nun eine einfache Batch-Datei schreiben, die das zu testende Programm vom Server lädt und z.B. anschließend gleich ausführt. Bei mir heißt diese Datei GO.BAT:
@echo off
fileload 192.168.0.2 project1.exe
project1.exe
Damit kann ein Testzyklus für zu prüfende Programme über das Kommando GO ausgeführt werden. Das ist besonders praktisch, wenn das Programm dabei den Rechner häufig zum Absturz bringt ;-)
C:\TEST>go
Natürlich ist der Quellcode des Programms FILELOAD.EXE auch recht nützlich, um die Programmierung des ABI-Interface für TCP-Verbindungen näher kennen zulernen.
Das Programm FILELOAD steht mit Quellcode unter [7] zur Verfügung. Das Windows-Programm FILESERV.EXE ist, natürlich auch mit Quellcode, unter [8] verfügbar.

7. Integration von FILESERV in die Delphi IDE

Für die oben dargestellte Anwendung von FILESERV.EXE bei der Delphi WDosX Programmentwicklung ist es zweckmäßig, das Programm mit in das Tools-Menü der Delphi IDE aufzunehmen. Gehen Sie dafür wie folgt vor:
  1. Wählen Sie im Hauptmenü den Menüpunkt Tools|Tools konfigurieren... und öffnen Sie damit den Dialog "Tools Optionen".
  2. Betätigen Sie den Schalter "Hinzufügen", damit öffnet sich ein weiterer Dialog "Tools Eigenschaften".
  3. Geben Sie hier die Werte entsprechend Bild 3 ein. Eventuell müssen Sie dabei den Programmpfad entsprechend anpassen. Da das Arbeitsverzeichnis leer ist, wird später das jeweils aktuelle Arbeitsverzeichnis der IDE für den File-Server benutzt. Sollten Sie ein seperates Verzeichnis für Ihre *.exe-Dateien verwenden, so müssen Sie dieses hier angeben.
  4. Schließen Sie den Dialog über den Schalter "OK". Beenden Sie anschließend den Dialog "Tools Optionen" über den Schalter "Schließen".

Bild 3: Eingabewerte für das Tool File-Server
Nun können Sie den Fileserver über das Hauptmenü der Delphi-IDE starten. Wählen Sie einfach den Menüpunkt Tools|File server oder kurz mittels .

8. Socket-Programmierung mit Delphi und WDosX

Für die einfache und komfortable TCP Socket-Programmierung unter DOS stehen in der DWPL-Bibliothek die Komponenten TwdxClientSocket und TwdxServerSocket zur Verfügung. Diese Komponenten können fast genau benutzt werden, wie die Windows Socket-Komponenten TClientSocket und TServerSocket (Diese Komponenten sind leider nur in der Professional-Version von Delphi enthalten). Die einzige Einschränkung besteht darin, dass unter DOS nur non-blocking Sockets zur Verfügung stehen, d.h. die Socket-Funktionen werden unmittelbar beendet, auch wenn die übergebenen Daten noch nicht über die Socket-Verbindung gesendet bzw. empfangen wurden. Die Rückmeldung erfolgt über entsprechende Ereignisse, genauso wie eventuelle Fehlermeldungen.
Zur Verwendung dieser Komponenten sollten Sie sich die Hilfeseiten von Delphi sowie die im Verzeichnis $(DELPHIX)\Projects\dwpl\demos\internetdemos\sockets enthaltenen Beispielprogramme studieren. Damit diese Programme ausgeführt werden können, müssen einige Konfigurationsdateien auf dem DOS-Rechner verfügbar sein, da bisher leider noch keine DNS-Namensauflösung existiert. Für diese wichtige Thema existiert auf dem DWP-Bazaar [9] ein entsprechendes Projekt. Mitarbeit ist hier natürlich sehr willkommen, Sie sind dazu herzlich eingeladen :-)

9. DOS Konfigurationsdateien im Ordner ETC

Die Konfigurationsdateien für TCP/IP habe ich in Analogie zu den Konfigurationsdateien bei Linux angelegt. Sie müssen unter DOS im Verzeichnis \etc auf dem selben Laufwerk liegen, wo auch das Programm ausgeführt wird. Im allgemeinen also unter c:\etc bzw. a:\etc. In diesem Verzeichnis sind die Konfigurationsdateien nach Bild 4 erforderlich.

Bild 4: Die TCP/IP Konfigurationsdateien unter DOS
Die Datei HOSTNAME enthält den Namen des Rechners sowie den Domain-Namen. Bei meinem DOS-Rechner also z.B. wie folgt:
# file c:\etc\hostname
#
# contains the full hostname of the host himself
#
berlin.int.europa.de
In der Datei Services werden den verwendeten Netzwerkdiensten die zugehörigen Protokolltypen (TCP oder UDP) sowie die Port-Adressen zugeordnet. Diese können von einem Linux- oder Windows-System übernommen werden. Hier ein Auszug aus meiner SERVICES Datei:
# file c:\etc\services
#
# This file lists common used services and there port 
# numbers corresponding to RFC 1060 (Assigned Numbers).
#
# Format:
#
#   /  [alias names...]   [#<comment>]
#
echo                7/tcp
echo                7/udp
discard             9/tcp    sink null
discard             9/udp    sink null
systat             11/tcp
systat             11/tcp    users
daytime            13/tcp
daytime            13/udp
netstat            15/tcp
qotd               17/tcp    quote
qotd               17/udp    quote
chargen            19/tcp    ttytst source
chargen            19/udp    ttytst source
ftp-data           20/tcp
ftp                21/tcp
telnet             23/tcp
...
Die Datei HOSTS enthält die Zuordnung der für das System bekannten Hosts mit ihren IP-Adressen. Da bisher noch keine DNS-Namensauflösung unter Delphi und WDosX implementiert ist, stellt dies den einzigen Weg dar, im Anwendungsprogramm Host-Namen zu verwenden. Ansonsten muss vorläufig immer die IP-Adresse verwendet werden. Meine HOSTS-Datei ist z.B. wie folgt aufgebaut:
# file c:\etc\hosts
#
# This file contains the mappings of IP addresses to 
# host names. Each entry should be kept on an individual 
# line. The IP address should be placed in the first
# column followed by the corresponding host name.
# The IP address and the host name should be separated by
# at least one space. Nicknames for host names may follow
# the full host name, seperated by at least one space.
#
# Additionally, comments (such as these) may be inserted
# on individual lines or following the machine name
# denoted by a '#' symbol.
#
# For example:
#
127.0.0.1       localhost                         # self
192.168.0.1     paris.int.europa.de     paris     # win
192.168.0.2     amsterdam.int.europa.de amsterdam # win
192.168.0.3     berlin.int.europa.de    berlin    # dos
192.168.0.4     oslo.int.europa.de      oslo      # linux
Das sind vorläufig alle Informationen, die ich zum Thema TCP/IP unter DOS und Delphi WDosX zusammengetragen habe. Sollten Ihnen einige Punkte noch unklar sein, so schicken Sie mir doch einfach eine e-Mail an:
immo.wache@dwp42.org
Und nun viel Erfolg mit DOS und TCP/IP.

Quellenverzeichnis und Links

[1] Crynwr Software: Open Source Packet drivers; http://www.crynwr.com/
[2] Trumpet "Internet Tools for DOS": Trumpet TCP/IP ABI; http://www.trumpet.com.au/dosapps/home.html
[3] SLIP & PPP for DOS: Packet driver FAQ; http://www.citilink.com/faq/connecting/dos/index.html
[4] Trumpet Slipper: SLIP Packet driver; ftp://ftp.trumpet.com.au/slipper/slippr15.zip
[5] LSppp - LadSoft PPP Driver for DOS Homepage: DOS PPP Packet driver; http://members.tripod.com/~ladsoft/lsppp/
[6] Toni Lopez' Homepage: DOS PPP Packet driver; http://personal.redestb.es/tonilop/
[7] FTP-Server von DWP: Programm FileLoad und Source; http://www.dwp42.org/pub/dwp/bazaar/dns/tools/FileLoad.zip
[8] FTP-Server von DWP: Programm FileServ und Source; http://www.dwp42.org/pub/dwp/bazaar/dns/tools/FileServ.zip
[9] DWP Bazaar Project DNS: Domain Name Service Resolver; http://www.dwp42.org/bazaar/dns/
</BODY> </HTML>
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-06 0:02:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!