Vraag : Het Hangen van het Programma van de rpg- Contactdoos op Connect ()

Eerst, ben ik nieuw aan contactdoos programmering. Ik vond grote online van een privé-leraar en gebruik code van het opnieuw. Ik gebruik een contactdoosprogramma om hexuitdraaibevelen naar een productiescorebord te verzenden. De hexuitdraai beveelt toename/decrementtellers, enz. op board.

In mijn contactdoosprogramma, verzend ik de binaire/hexuitdraaibevelen naar diverse 8 ingevoerde havens voor de raad aan proces. In dit voorbeeld, gebruik ik software om het binaire bevel te verzenden om input 1 (totale telling) te simuleren. Het contactdoosprogramma zal willekeurig een fout terugkeren geen die het met host.

Ex kon verbinden:

I kan mijn programma 70x binnen een minuut in werking stellen of zo en het toename totale tegen70x. Alles is fijn. Dan, uit nergens, wanneer geroepen, probeert het programma om een verbinding op haven 4001 te maken en het hangt. Het keert dan een fout terug verklarend het tot geen verbinding aan de gastheer binnen de onderbreking period.

As kon maken voor het werken/niet het werken, lijkt het volledig willekeurig. Ik kan de contactdoos creëren, de contactdoos verzenden en meerdere keren sluiten en allen is fijn. Ik kan verzenden 3 minuten dan wachten en, en het programma hangt op verbindt functie. Om het even welke ideeën?

thanks vooraf - Adam
" codeBody "
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
eval = contactdoos                       
             (AF_INET: SOCK_STREAM: IPPROTO_IP)

als verbind (sok: p_connto: addrlen) < 0   
eval vergis me = errno                            
callp dicht (sok)                            
callp sterf ('verbind (): '+%str (strerror (vergis me))) 
terugkeer                                           
endif                                            

eval rc = verzendt (sok: %addr (activeCmd): 4: 0) 
                                                
als rc < 4                                
eval vergis me = errno                           
callp dicht (sok)                           
callp matrijs (%str (strerror (vergis me)))              
terugkeer                                          
endif                                           

eval rc = Recv (sok: %addr (activeCmd): 4: 0) 
e om het even wat als geen teruggekeerde bytes                 
als rc < 1                                
callp dicht (sok)                           
callp matrijs (%str (strerror (vergis me)))              
terugkeer                                          
endif

Antwoord : Het Hangen van het Programma van de rpg- Contactdoos op Connect ()

Voor zover partijNEP dat relais, ik werkelijk van het geluid van dat houd, maar weet wat niet het is.

Droevig… NEP -- Eeuwigdurend Programma.

Fundamenteel, is het een programma dat u om in één of ander partijsubsysteem voorlegt te lopen en dat aan lijn voor altijd wordt verwacht. (Goed, tot één of ander soort bevel of signaal vertelt het om te beëindigen.) U zou het aan baanrij QSYSNOMAX kunnen voorleggen om als diverse serverprogramma's te lopen.

Uw programma zou door de contactdoosverbinding te openen starten. Dan zou het terwijl het wachten op een ingang om op een gegevensrij aan te komen zitten. Wanneer een ingang verscheen, zou het het over de contactdoos verzenden en zou terugkeren om te zien of was een andere ingang op de gegevensrij.

Het zou kunnen 99.999% van zijn tijd doorbrengen die enkel wacht. Om het even welk aantal programma's van andere banen zou bevelen naar de enige gegevensrij kunnen verzenden.

Indien nodig, zou de gegevensrij kunnen worden gesloten zodat elk bevel had een uniek die herkenningsteken, misschien uit GENUUID API afleidt. Wanneer een bevel van de rij wordt getrokken en de contactdoos stuurde, wordt unieke identiteitskaart gebruikt om een erkenning door de gegevensrij terug te sturen. Slechts zou de het verzenden baan weten welke sleutel de erkenning voor het was. De gegevensrij zou bidirectionele communicatie tussen uw banen en uw „contactdoosserver“ verstrekken.

Als het volume zo veel was geen die uw server omhoog kon houden, zou u eenvoudig tweede beginnen.

De „contactdoosserver zou“ alles nodig hebben om uw contactdozenwerk te doen. Het zou geen complicaties van het moeten de bevelen van de gegevensrij begrijpen hebben -- het verzendt enkel wat verschijnt. Houd de logica in keurig gescheiden wordt geconcentreerd proc, modules en programma's dat -- keurige arbeidsverdeling.

Uw „cliëntprogramma's zullen“ ook eenvoudig zijn. Allen zij doen is handvat de aangewezen bevelkoorden en verzendt hen naar de gegevensrij. (Naar keuze, is het een bidirectionele gegevensrij; maar dat zou een recentere verhoging kunnen zijn. Maak het werken, dan maak beter het.)

Als u gegevens geen rijen hebt gebruikt, zou u hen veel gemakkelijker moeten vinden dan contactdozen.

Tom
Andere oplossingen  
 
programming4us programming4us