 |
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 |
player424
Anmeldungsdatum: 30.12.2008 Beiträge: 21
|
Verfasst am: 07.01.2009, 21:07 Titel: problem mit winsock |
|
|
servus an alle
ich hab ein problem mit winsock
ich wollte erstmal einen kleinen client probieren. hab schon erfahrung mit winsock unter c++. Nun habe ich ein problem: ich kann mich zwar mit nem server verbinden und auch daten senden, aber ich empfange nichts, weder eine error page noch sonst was. Hier mal der ausschnitt aus dem code
Code: |
dim as integer rc=send(s, msg, len(msg), 0)
if rc=SOCKET_ERROR then print "Fehler beim senden"
dim buf as zstring*recvblen+1
dim r as integer
r=recv(s, buf, recvblen, 0) |
das ist wohl der teil in dem der fehler liegt. hoffe mir kann jemand helfen
edit: der zeigt an x zeichen gesendet (je nachdem wie viel ich angebe) und 0 zeichen empfangen
ha die version 0.20.0 beta. gibt es da irgendwelche bugs bezüglich winsock? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.01.2009, 22:00 Titel: |
|
|
winsock ist in fb genau das selbe wie in c++, von daher gibt es da sicher keine "bugs". probier doch mal die beispiele in examples\Windows\winsock aus. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
player424
Anmeldungsdatum: 30.12.2008 Beiträge: 21
|
Verfasst am: 07.01.2009, 22:05 Titel: |
|
|
gut das das dann geklärt ist . also an dem beispiel in dem gennanten verzeichnis hab ich mich orientiert ab er es will nicht klappen. ich hab die funktion resolveHost aus dem beispiel übernommen um eine fehlerquelle auszuschliessen. der gibt mir weder beim socket erstellen noch beim connect oder senden der daten einen fehler. auch bei recv nicht, aber der zeigt bei recv bei empfangenen bytes 0 an.  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 07.01.2009, 23:58 Titel: |
|
|
Hi,
das Beispiel httpget.bas habe ich mal kompiliert (einfach in Konsole).
Damit man was sieht
Code: | ...
'' quit winsock
WSACleanup
Sleep '<- eingefügt
... |
Probier das doch mal genauso!
Wenn das funktioniert musst du deinen Quellcode mal genauer damit vergleichen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
player424
Anmeldungsdatum: 30.12.2008 Beiträge: 21
|
Verfasst am: 08.01.2009, 00:04 Titel: |
|
|
sleep hatte ich auch vorher schon drin, mein problem ist ja, dass der server nichts sendet. glaub aber mittlerweile es liegt am connect
Code: | declare function resolveHost(byref hostname as string) as integer
const recvblen=8100
dim wsa as WSAData
if WSAStartup(MAKEWORD(1,1), @wsa)<>0 then print "Starten von Winsock gescheitert"
dim s as SOCKET
s=opensocket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
if s=INVALID_SOCKET then print "Fehler beim erstellen des Sockets"
dim ad as sockaddr_in
ad.sin_family=AF_INET
ad.sin_port=htons(80)
ad.sin_addr.s_addr=inet_addr("213.202.225.70")
if connect(s, cast(PSOCKADDR, @ad), len(ad))=SOCKET_ERROR then print "Verbindung gescheitert"
|
ist da was falsch dran? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.01.2009, 00:57 Titel: |
|
|
??
Ich bin kein Winsock - eksbär.de
so Code: | #Include Once "win/winsock.bi"
Const RECVBUFFLEN = 8192
Const NEWLINE = !"\r\n"
Dim hostname As String
Dim path As String
hostname ="213.202.225.70"
'' init winsock
Dim wsaData As WSAData
If( WSAStartup( MAKEWORD( 1, 1 ), @wsaData ) <> 0 ) Then
Print "Error: WSAStartup failed"
End 1
End If
'' open socket
Dim s As socket
s = opensocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
If( s = 0 ) Then
Print "Error:"; WSAGetLastError; " Calling: socket()"
End 1
End If
'' connect to host
Dim sa As sockaddr_in
sa.sin_port = htons( 80 )
sa.sin_family = AF_INET
sa.sin_addr.S_addr = inet_addr(hostname)
If ( Connect( s, Cast( PSOCKADDR, @sa ), Len( sa )) = SOCKET_ERROR ) Then
Print "Error:"; WSAGetLastError; " Calling: connect()"
closesocket( s )
End 1
End If
'' send HTTP request
Dim sendbuffer As String
sendBuffer = "GET /" + path + " HTTP/1.0" + NEWLINE + _
"Host: " + hostname + NEWLINE + _
"Connection: close" + NEWLINE + _
"User-Agent: GetHTTP 0.0" + NEWLINE + NEWLINE
If( send( s, sendBuffer, Len( sendBuffer ), 0 ) = SOCKET_ERROR ) Then
Print "Error:"; WSAGetLastError; " Calling: send()"
closesocket( s )
End 1
End If
'' receive until connection is closed
Dim recvbuffer As ZString * RECVBUFFLEN+1
Dim bytes As Integer
Do
bytes = recv( s, recvBuffer, RECVBUFFLEN, 0 )
If( bytes <= 0 ) Then
Exit Do
End If
recvbuffer[bytes] = 0' add the null-terminator
Print recvbuffer' print buffer as a string
Loop
Print
'' close socket
shutdown( s, 2 )
closesocket( s )
'' quit winsock
WSACleanup
Sleep | klappts! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
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.
|
|