Hej, jag har ett program som går som en service och har en winsock-kontroll på sig. Hej, jag loggar error-eventet i winsock-kontrollen: Är jag ignorerad eller förstår ni inte frågan eller vad beror det på att ingen orkar svara? Hej, I många andra forum så hjälps man ju åt att lösa nått, jag kräver inte ett färdigt svar. Jag har också läst frågan och tror att jag har förstått den, men har inget bra svar. Tyvärr råkar man ut för det ibland. Jag tänkte också svara och förklara att det sannolikt bara var så att det var ett mycket ovanligt problem, och att det därför förmodligen inte finns någon som har råkat ut för just det. Tack för svaret. Nu var det väldigt länge sedan jag grejade med winsock, så jag kan vara helt borta nu... :) Jo, det går att kolla state och jag har en timer på det, den kollar state konstant och är det nått error eller likn så startar den om, jag hade problem där innan att vissa "fel" som uppstod inte togs omhand men efter jag gjorde så här löste sig det. Det kan vara en idé, det löser ju inte felet, men man borde komma ifrån symptomen om det nu är något med winsockkontrollen skiter sig. Jag har inte kollat vilken state den har just då, det har jag missat. Jag ska kolla det nästa gång det blir fel. Ok, nu fick jag problemet igen, denna gång med STATE på winsock:) Bertil Hej, jo jag antar att jag får bygga om det lite. Rent allmänt, som jag förstår det, skall man alltid stänga sin connection till winsocken då all data från klient till server har skickats färdigt och gör du det inte detta själv genom .close så utför winsock detta själv. När detta hur som helst händer är STATE satt till 8 dvs "Peer is closing the connection". En exempelhantering på state 8. Jag vill börja med att påminna att jag anropar min winsock från internet explorer. Bertil "felet" du gör är att du använder samma socket till att lyssna efter anslutningar som du använder för att hantera anslutningarna. Det korrekta är att du använder en annan anslutning än den som lyssnar för att svara på förfrågan. I princip: Peter, det är precis så jag gör idag, hade bara inte med "8". Det är den princip man ska använda, i alla fall om du vill ha en stabil och användbar server ;) Oskar: Att använda en array med winsocks är i de allra flesta fall att föredra men det handlar ju då om att vilja ha stöd för att fler användare skall kunna ansluta till din serverapp. samtidigt. Jag anser inte att det är likställt med sämre serverstabilitet om man bara använder en winsock. > Eller? Oskar: Okidoki! Oskar har rätt i det påståendet att det blir fel om man tex uppdaterar flera ggr innan sidan är klar.Winsock, irriterande problem.
Jag kan sedan med hjälp av ett webbGUI kolla status på denna service.
Precis som en vanlig webbsida. Funkar både lokalt och via WAN/LAN
Min app agerar då webbserver.
Funkar väldigt bra över lag MEN ibland så slutar den bara att funka.
Jag uppdaterar sidan men inget händer, jag har kollat i designläge när det blir detta fel och till synes så händer INGET, winsock får ingen request eller nånting, den lägger bara av att ta emot.
Jag startar då om min service och då går den igen.
Finns inget tidsmönster heller.
Jag har en del felhanteringar men dom visar inget, slutar bara att funka. Resten av programmet jobbar på som det ska så det är inte hängt eller nått.
Kan nån komma med NÅTT tips i frågan?
/BSv: Winsock, irriterande problem.
Jag får två sådana:
wslisten_Error Number:10054 Description: The connection is reset by remote side
Och efter det kommer en:
wslisten_Error Number:10053 Description: Connection is aborted due to timeout or other failure
Just dessa orsakar inget fel i övrigt, det snurrar på.
Men när jag kom hem idag så hade winsock hängt sig och webbsidan funkade inte.
Startar om och då går det.
Dock helt uttan error.
/BSv: Winsock, irriterande problem.
/BSv:Winsock, irriterande problem.
Du är förmodligen inte ignorerad, och sannolikt är det heller inte så att det är problem med orken att svara. Kanske förstås inte frågan, men det tror jag inte heller.
På pellesoft finns många duktiga människor, men det finns frågor som ingen kan svara på. Kanske är detta en sådan?
Jag vet heller inte om det kan generellt bero på din attityd i dina frågor. Du har tyvärr en förmåga att anlägga en både spydig och otrevlig ton. Folk som hjälper här gör det för att man tycker det är kul att hjälpa, men det är få som tycker det är kul att hjälpa arroganta personer.
Lycka till!
// JohanSv: Winsock, irriterande problem.
Är jag otrevlig och arrogant i "mina inlägg" ?? BAra för att jag blev sur på DIG i ditt svar i en fråga (för länge sedan) så är jag "otrevlig och arrogant" ? Jag HJÄLPER folk när jag engagerar mig, inte snackar massa teoretisk mambojambo som DU gör.
Nu SKITER jag i detta forum, det har NÄSTAN tappat allt ett forum ska ha...
Detta forum har arroganta personer som, bara för att dom sitter på kunskap som en annan saknar då och då, sitter och garvar åt en i smyg i sin trista ensamhet och säger "JAG HJÄLPER DIG FÖR ATT JAG ÄR SNÄLL, VA GLAD FÖR DET!" eller "JAG BEHÖVER INTE HJÄLPA DIG"
Varför är ni HÄR då??
Vänta.....nu är jag i fel tråd, detta ska få en helt EGEN, i stil med andra likn som jag ser mer och mer här! Efter det slipper ni mig, har iaf fått mer hjälp i mina frågor på GOOGLE senaste året.Sv:Winsock, irriterande problem.
Eftersom ingen annan har svarat kan jag ändå försöka mig på lite felsökning. Hur är programmet uppbyggt? Flera trådar? Har du koll på vad appen sysslar med i övrigt när felet inträffar? Någon mjukvarubrandvägg på servern?
/JohanSv: Winsock, irriterande problem.
Sv:Winsock, irriterande problem.
Klart man råkar ut för frågor man inte kan svara på, dock så kräver jag aldrig ett komplett svar, aldrig nånsin.
EDIT: Jag menar oxå på att man ska diskutera en fråga.
Jag kan då inte säga att winsock som krånglar skulle vara direkt ovanligt?!
Johan D:
Programmet är uppbyggt som en service, men går att köra "som vanligt" genom att dubbelklicka på den. Den innehåller ett formulär som jag placerat winsock på men som är dold.
Winsock lyssnar på en valfri port och jag anropar med hjälp av IExplorer, den får en request, jag tar hand om den och ansluter, den skickar sedan data till IExplorern.
Inget mera.
När det slutat funka så händer inget i request-delen i winsock, den får helt enkelt ingen kontakt med winsock. Startar jag om mitt progg så funkar det igen.
I övrigt så gör appen det den ska även när winsock hänger sig.
Jag kör även lokalt på datorn så brandvägg är nog inte problem, minns ja inte fel saknas brandvägg på datorn som sådan.
Så, jag vet inte vart felet kan ligga....
/BSv: Winsock, irriterande problem.
Använder du samma winsock hela tiden eller skapar du en instans för varje anslutning? Använder du samma instans kanske det kan bli något fel i överföringen och kontrollen inte återställs till att lyssna på nya anrop? Går det inte kolla "state" på kontrollen? I sådana fall, vilket state har den då det inte går att ansluta?
/JohanSv:Winsock, irriterande problem.
Jag kör en och samma instans hela tiden. Ska jag kanske testa att skapa nya instanser för varje gång?
/BSv: Winsock, irriterande problem.
Vad har den för state när den inte fungerar?
/JohanSv:Winsock, irriterande problem.
Tack för den:)
(Där ser ni, det va en elementär sak som kom upp pga att man sitter och spånar...)
MVH / BSv: Winsock, irriterande problem.
Nr 8, "Peer is closing the connection"
Googlade lite men fanninte vad som händer då, ej heller hur jag hanterar det.
Någon som e manad?
/BSv:Winsock, irriterande problem.
När du gör dina anrop för uppdateringar mm till din service kan du inte då först innan anrop går igenom kolla upp vilken STATE winsocken har? Om STATE = 8 köra en connect igen.
Efter att sedan connecten är gjort igen kör du genom ditt anrop.Sv: Winsock, irriterande problem.
Vad betyder state 8 då? "Peer is closing the connection" står det men vad gör den då?`
EDIT: Kom på att om jag ska kolla innan anrop så vet jag väl inte när?
Jag har idag gjort så att en timer kollar winsock-state hela tiden, om den inte är i rätt state så stänger den o börjar om.
Om winsock av en händelse slutar lyssna så kommer jag inte se när ett anrop görs.
Så sättet jag gör på nu verkar ju vara det som funkar, dock har jag ingen hantering på state 8, då jag inte vet vad den gör.
/BSv:Winsock, irriterande problem.
Den normala gången är alltså att öppna en connection mot winsocken och sedan stänga den när all data är överförd.Sv:Winsock, irriterande problem.
Private Sub cmdSend_Click()
If Winsock.State = sckConnected Then
Winsock.SendData "Data att skicka"
End If
End Sub
Denna bör ju då föregås av en Winsock.Connect eftersom kontakten stängts ned efter föregående anrop.
Private Sub cmdConnect_Click()
Winsock.RemoteHost = "127.0.0.1"
Winsock.RemotePort = 1000
Winsock.Connect
End Sub Sv: Winsock, irriterande problem.
Dvs jag kör inte exemplet ovan med "send" etc. Jag hanterar så här:
Först startar jag en "listen" på rätt port mm. inga problem.
Sen anropas winsock:
<code>
Private Sub wslisten_ConnectionRequest(ByVal requestID As Long)
wslisten.Close
wslisten.Accept requestID
Do Until wslisten.State = 7
'DoEvents
Loop
End Sub
</code>
Sen är det en connect, data överföres och sedan stänger jag anslutningen:
<code>
Private Sub wslisten_SendComplete()
wslisten.Close
wslisten.Listen
End Sub
</code>
Detta funkar ju merparten av tiden. men titt som tätt så stannar den bara och jag får ingen kontakt med winsock från internet explorer.
Visar sig ju nu att den hamnar i state 8 när felet inträffar.
Jag måste då hantera detta oxå.
Sätter dit en "close" + en "Listen" direkt efter så får vi se hur det går.
Funkar ju på dom övriga:)
/BSv:Winsock, irriterande problem.
Försök med detta.
Eftersom du har en timer som körs och en rutin som kollar av winsock.state så borde du kunna köra igång winsock.listen igen då rutinen upptäcker att winsock.state = 8.
Dock bör du förmodligen köra en winsock.close före du kör en ny winsock.listen.
(Helst bör du egentligen kontrollera din winsock.close själv efter varje avslutat anrop och öppna nya connections med allt vad det innebär för varje nytt anrop du gör till winsocken.)
En som spånar fritt....Sv:Winsock, irriterande problem.
sock1.listen
sub sock1_connectionrequest(requestid as long)
sock2.accept requestid
end sub
sock2 används sedan för att prata med klienten, sock1 är fortfarande öppen hela tiden och lyssnar bara. Självklart har du inte "bara" en sock2 utan du har en hel array som du dynamiskt laddar in fler sockets in i när det behövs/har ett antal "på lager" i en arraySv: Winsock, irriterande problem.
Jag har det nu, ska se hur det går, om det inte funkar gör jag som oskar sa.
Oskar: Det där låter som en bra ide´. Eller det är kanske så man SKA göra?
Jag ska bygga om så det blir så, tack för tipset:)
Och fritt spånande uppmuntras kraftigt :D
/BSv:Winsock, irriterande problem.
Sv: Winsock, irriterande problem.
Det beror ju helt på användningsområdet, en eller fler användare.
Eller?Sv:Winsock, irriterande problem.
Nej, det är faktiskt stabilitet. Säg att du har en enda användare, användaren laddar sedan sidan. Säg att användaren trycker på uppdatera innan sidan är tillbaka? Eller att en bit att servern ligger och väntar på något som aldrig kommer, användaren försöker då göra någonting annat. Men det går inte, användaren måste vänta tills timeouten har gått. Eller liknande.Sv: Winsock, irriterande problem.
Det känns dock som om man borde kunna bygga in en hantering för detta på servern men det kanske är ett problem som du säger. Har inte jobbat så mycket med Winsock själv.
Tack!Sv:Winsock, irriterande problem.
Alternativt klickar runt i länkarna, då blir det oxå errors.
Jag har ju byggt in det nu, har inga problem med att uppdatera flera ggr, inträffar ett error så återställer den sig.
Dock ska ja kolla upp fler sessioner.
/B