Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.02.2006, 17:28 Titel: Winsock problem! |
|
|
Hallo
Ich hab heute mal wieder ein bischen mit der Winsock.bi rum gespielt
und bin bei dem versuch ein kleinen Chat zu proggen auf ein problem
gestoßen. Beide programme (d.h. sever und client ) haben einen
Fehler und zwar hier:
Sever:
Code: |
IF ( bind( accept_socket , CPTR( PSOCKADDR, @addr ) , LEN( addr ) ) = SOCKET_ERROR ) THEN
PRINT "Socket konnte nicht an Port 80 gebunden werden!": SLEEP: END
ELSE
PRINT "Socket an Port 80 gebunden!"
END IF
|
Client:
Code: |
IF ( Connect( socket , CPTR( PSOCKADDR, @addr ) , LEN( addr ) ) = SOCKET_ERROR ) THEN
PRINT "Verbindung zu 192.168.1.3 konnte nicht hergestellt werden!": SLEEP: END
ELSE
PRINT "Verbindung zu 192.168.1.3 hergestellt!"
END IF
|
Es kommt immer der Fehler!
Kennt sich vieleicht jemand ein bischen damit aus und kann mir sagen
woran das ligen könnte. Wenn der Code nicht reicht poste ich meinet
wegen auch den rest.
MFG Thorben |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.02.2006, 20:15 Titel: |
|
|
Die länge des Codes hält sich noch in grenzen. Ich hab ihn trozdem
mal hochgeladen um das mal zu testen.
die beiden Codes heißen:
Winsock: >> Sever
b.z.w
Winsock: >> Client
Der Fehler ist das die Funktionen BIND und CONNECT beide
SOCKET_ERROR zurückgeben und ich nicht weiß warum. |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 28.02.2006, 20:53 Titel: |
|
|
Ich sag jetzt lieber nicht was ich denke ...
Orginal:
Code: | IF ( socket = OpenSocket( AF_INET , SOCK_STREAM , IPPROTO_TCP ) = INVALID_SOCKET ) THEN
PRINT "Socket konnte nicht erstellt werden!": SLEEP: END
ELSE
PRINT "Socket erstellt!"
END IF |
Scheint zu gehen:
Code: | socket = OpenSocket( AF_INET , SOCK_STREAM , IPPROTO_TCP )
IF ( socket = INVALID_SOCKET ) THEN
PRINT "Socket konnte nicht erstellt werden!": SLEEP: END
ELSE
PRINT "Socket erstellt!"
END IF |
Dieser Ausdruck bewirkt etwas anderes als du meinst:
Code: | IF ( socket = OpenSocket( AF_INET , SOCK_STREAM , IPPROTO_TCP ) = INVALID_SOCKET ) THEN |
Zerlege besser solche Begriffe in mehre kleine und dann geht's.
(Der Server hat nen ganz ähnlichen Bug und weitere dieses Musters warten)
Auch sowas macht mich stuzig:
Code: | re = send( socket , use_string2 , LEN( use_string2 ) , 0 )
re = recv( socket , use_string1 , 256 , 0 ) |
Du weisst, das re überschrieben wird, obwohl du es nicht mal verwendet hast? _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.02.2006, 21:14 Titel: |
|
|
Danke erstaml für den Tipp jetzt geht es so weit(aber nur fast).
Ich habe folgendes geändert:
Code: |
re = recv( connected_socket , use_string1 , 256 , 0 )
IF re = SOCKET_ERROR THEN
PRINT "Fehler": SLEEP: END
ELSE
PRINT "Empfangen: "; use_string1
END IF
use_string2 = "RETURN: " + use_string1
send( connected_socket , use_string2 , LEN( use_string2 ) , 0 )
|
Nun gibt nämlich RECV einen SOCKET_ERROR zurück.
Vieleicht kannst du mir ja auch da helfen...
Die IP ist übrigens die meines Rechners um das ganze zu testen. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 28.02.2006, 21:16 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Wem gehört eigentlich die IP 192.168.1.3 ?
Ist die Korrekt?
(wahrschneilich nicht der Fehler, aber micht machst stuzig) |
Die gehört der ICANN und ist für die Verwendung in LANs vorgesehen. Im Internet ist sie nicht erreichbar, sie kann von jedem Hobbynetzwerker intern vergeben werden. Vermutlich ist der Zielcomputer im lokalen Netzwerk
a) nicht vorhanden - oder -
b) nicht auf dem HTTP-Port 80 zu erreichen. _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.02.2006, 21:29 Titel: |
|
|
@Sebastian:
Keiner der beiden fälle trifft zu... |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 28.02.2006, 21:46 Titel: |
|
|
Wie ich sehe benutzt du winsock2. Da ist irgendwas komisches, was ich auch nicht schaffe zu lösen. Includiere win/winsock.bi und mache am anfang "Makeword(1,1)" statt 2,0. Dann klappts(bei mir)
Michael _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 28.02.2006, 21:55 Titel: |
|
|
hmmmm...
Bei mir geht es immer noch nicht |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 03.03.2006, 18:45 Titel: |
|
|
Bei mir schmiert erst der Server ab, mal sehn was sich tun lässt.
Hier ist das Wunder mittel:
Ersetze
Code: | DIM use_string1 AS STRING
DIM use_string2 AS STRING |
mit
Code: | DIM use_string1 AS zSTRING *256
DIM use_string2 AS zSTRING *256 |
String ist ein Typischer Freebasic Datentyp, "Normale" Programme nutzen ZSTRING.
Edit: Bug Report:
Wenn man
sendet, meldet der Server
Code: | HELLO WORLD
No WORLD |
Zurück.
(Der sollte aber leicht zubeheben sein, das über lasse ich dir ) _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.03.2006, 01:19 Titel: |
|
|
send( socket , use_string2 , LEN( use_string2 ) , 0 )
=>
send(socket, strptr(use_string2), len(use_string2), 0)
du brauchst einfach immer den zstring-ptr des strings an den du eben per strptr(stringvar) kommst.
Progger_X, du solltest vielleicht auch mal was über pointer lesen.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.03.2006, 14:40 Titel: |
|
|
oh stimmt bei misslungenen versuchen, was mit netzwerk zu machen fällt mir eben immer progger_x ein.. gewohnheitssache _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
Thorben
Anmeldungsdatum: 26.04.2005 Beiträge: 173 Wohnort: SH
|
Verfasst am: 04.03.2006, 20:35 Titel: |
|
|
Cool jetzt gehts.
Danke das ihr euch die Mühe gemacht hab. |
|
Nach oben |
|
|
|