|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
timscheu
Anmeldungsdatum: 10.03.2007 Beiträge: 8
|
Verfasst am: 31.03.2007, 11:29 Titel: Winsock: Fehler im Intranet |
|
|
Hi Leute,
ich habe mir zuhause einen Server eingerichtet und wollte darauf mit einem FreeBASIC und Winsock zugreifen (per HTTP). Wenn ich aufs Internet zugreifen will klappt alles super, wenn ich aber auf meinen lokalen Server zugreifen will kommt keine Antwort. Ich habe auch schon in den Logs win Apache nachgesehen: Kein Logeintrag! Woran kann das liegen?
Hier der Code:
Code: | OPTION EXPLICIT
DECLARE FUNCTION resolveHost (hostname AS STRING) AS INTEGER
#include once "win/winsock.bi"
CONST RECVBUFFLEN = 8192
CONST NEWLINE = "\r\n"
CONST hostname = "TiServer"
DIM wsaData AS WSAData
DIM ip AS INTEGER
DIM s AS SOCKET
DIM sa AS sockaddr_in
DIM sendbuffer AS STRING
DIM recvbuffer AS ZSTRING * RECVBUFFLEN + 1
DIM bytes AS INTEGER
PRINT "--------------------------------------------------------------------------------";
PRINT "LoginLogger ";
COLOR 10
PRINT "v0.0b"
COLOR 7
PRINT "Socket wird erstellt............... ";
IF(WSAStartup(MAKEWORD(1, 1), @wsaData) <> 0) THEN
COLOR 12
PRINT "Fehler"
PRINT "Socket konnte nicht erstellt werden!"
COLOR 7
PRINT "--------------------------------------------------------------------------------";
END 1
END IF
COLOR 10
PRINT "OK"
COLOR 7
PRINT "Servername wird aufgel”st.......... ";
ip = resolveHost(hostname)
IF(ip = 0) THEN
COLOR 12
PRINT "Fehler"
PRINT "Servername wurde nicht gefunden!"
COLOR 7
PRINT "--------------------------------------------------------------------------------";
END 1
END IF
COLOR 10
PRINT "OK"
COLOR 7
PRINT "Socket wird ge”ffnet............... ";
s = opensocket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
IF(s = 0) THEN
COLOR 12
PRINT "Fehler"
PRINT "Socket konnte nicht ge”ffnet werden!"
COLOR 7
PRINT "--------------------------------------------------------------------------------";
END 1
END IF
COLOR 10
PRINT "OK"
COLOR 7
PRINT "Verbindung wird aufgebaut.......... ";
sa.sin_port = htons(80)
sa.sin_family = AF_INET
sa.sin_addr.S_addr = ip
IF (connect(s, cast(PSOCKADDR, @sa), LEN(sa)) = SOCKET_ERROR) THEN
COLOR 12
PRINT "Fehler"
PRINT "Die Verbindung konnte nicht aufgebaut werden!"
COLOR 7
closesocket(s)
PRINT "--------------------------------------------------------------------------------";
END 1
END IF
COLOR 10
PRINT "OK"
COLOR 7
PRINT "Die Daten werden ?übertragen... ";
sendBuffer = "GET /login.php HTTP/1.0" + NEWLINE + _
"Host: " + hostname + NEWLINE + _
NEWLINE
IF(send(s, sendBuffer, LEN(sendBuffer), 0) = SOCKET_ERROR) Then
COLOR 12
PRINT "Fehler"
PRINT "Die Daten konnten nicht ?übertragen werden!"
COLOR 7
closesocket(s)
PRINT "--------------------------------------------------------------------------------";
END 1
END IF
COLOR 10
PRINT "OK"
COLOR 7
PRINT "Warte auf R?ckmeldung..."
do
bytes = recv(s, recvBuffer, RECVBUFFLEN, 0)
if(bytes <= 0) then
exit do
end if
recvbuffer[bytes] = 0
print recvbuffer
loop
shutdown(s, 2)
closesocket(s)
WSACleanup
PRINT "--------------------------------------------------------------------------------";
FUNCTION resolveHost(hostname AS STRING) AS INTEGER
DIM ia AS in_addr
DIM hostentry AS hostent PTR
ia.S_addr = inet_addr(hostname)
IF (ia.S_addr = INADDR_NONE) THEN
hostentry = gethostbyname(hostname)
IF (hostentry = 0) THEN
EXIT FUNCTION
END IF
FUNCTION = *cast(INTEGER PTR, *hostentry->h_addr_list)
ELSE
FUNCTION = ia.S_addr
END IF
END Function |
|
|
Nach oben |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.03.2007, 13:55 Titel: |
|
|
Wenn ich einen Server ansprechen willm muß er eine IP-Adresse haben..
..darüber schweigst du dich aus.
Dein Server hat einen HostNamen('TIBasic'), gesetzt den Fall, TIBasic hätte eine IP-Adresse, wie erkennt der Rechner, daß TiBasic zu dieser IP-Adresse gehört?
-->Eintrag in der Hosts-Datei vorhanden/prüfen..
Der Anfang jeglicher Kommunikation sollte im Zweifelsfall immer der Ping-Befehl sein:
Motto: Wenn ich den anpingen kann, dann geht auch noch mehr
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 31.03.2007, 14:56 Titel: |
|
|
jep. wenn der server aufm gleichen rechner läuft => 127.0.0.1 ansonsten => (wie ytwinky schon gesagt hat) anpingen mit
Code: |
shell "ping [Server] > ping.txt"
open "ping.txt" fro input as #1
[...]
|
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
|
ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.03.2007, 15:25 Titel: |
|
|
Naja, ich würde OpenPipe.Bas nehmen, da sind weniger Schreibfehler drin
(Außerdem wird keine zusätzliche Datei angelegt, Open Pipe halt..)
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
|
timscheu
Anmeldungsdatum: 10.03.2007 Beiträge: 8
|
Verfasst am: 31.05.2007, 11:32 Titel: |
|
|
OK, hat sich erledigt. Ich habs neu geschrieben und es geht. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|