tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
569
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    fredlllll fredlllll ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    120
    Folgende Situation:
    Ich habe fürs Studium einen Generator für Fraktale geschrieben. Wenn ich den Algorithmus intern rechnen lasse (d.h. ich habe den Thread und die Ausgabe im selben Programm) kriege ich ein schönes Bild ohne jegliche Fehler. Ich hab mir jedoch gedacht es wäre toll, wenn ich zum Berechnen der Fraktale mehrere Pcs benutzen könnte. MulitCore support ist ja mit der .Net Runtime kein Problem, denn die legt verschiedene Threads auf die Kerne. Aber ich wollte mehr und habe angefangen meine "kerne" zu schreiben. Jeder Kern ist sozusagen ein Server der auf einem Pc läuft. Ich verbinde mich also mit meinem Programm zu jedem Server im Netzwerk, und gebe jedem Kern dann verschiedene Bereiche der Grafik mit, die Sie dann berechnen sollen. und hier kommts zum Problem. Der Kern berechnet die Daten, und schickt sie mir in der Form 15:X/Y/nummer zurück. Dabei stoße ich zuerst auf das Problem, dass Sockets einfach nachrichten aneinanderKetten, wenn sie schnell hintereinadner gesendet werden. das habe ich damit umgangen, dass ich hinter jede NAchricht einfach ein Environment.newLine gepappt habe. Die Strings sende ich via Encoding.UTF8.getBytes(""); und hole mir also am Client den String wieder. der hängt dann eben zusammen, was mich tierisch nervt >.<
    Also trenne ich den string erst durch Newlines, dann hol ich mir den Code der vorne steht (15 in diesem fall) und dann schau ich mir die parameter an. Und jetzt zum eigentlichen problem. ich habe mal einen screenshot angehängt, wo ihr seht, wie mein Bild danach aussieht, erstens fehlen manchmal pixel wie es scheint. das kann daran liegen, dass es nicht so ganz funktioniert, mit dem Buffer, wenn eine nachricht abgeschnitten wird. dann hänge ich sie eigentlich vorne wieder dran, aber manchmal klappt das nicht =( weiß der Teufel wieso.
    was mich aber eher aufregt, sind die hellen Punkte mittem im Schwarzen!! die gehören da einfach nicht hin! und der algorithmus ist exact der selbe wie der im Programm drin. also hab ich vermutet, dass da irgendwas mit der Übertragung nicht stimmt. Habe also einfach mal die nachricht 2 mal geschickt, der effekt war, dass die roten Punke weggingen (rot ist der hintergrund der Picbox) aber die Blauen blieben nach wie vor. und jetzt frage ich mich ernsthaft ob ich noch alle Tassen im Schrank habe, weil es kann doch nicht sein, dass ein algorithmus einfach an bestimmten stellen 100 mal durchläuft(oder mehr, je nach Iterationszahl), anstatt der erwarteten 3mal. (wenn die Eingabeparameter falsch wären würde das total anders aussehen)
    Was mir dabei noch aufgefallen ist, ist, dass die Muster der Fehler bei jedem mal Identisch sind, also die schrägen linien links unten im bild z.B sind nach neustart beider programme wieder da.
    hat irgendwer ne Ahnung wieso die Maschinen mir da derartig Streiche spielen? =(

    /edit: ich hab jetzt mal das generierte vom kern lokal gespeichert. und das ist fehlerlos. also muss irgendwas bei der übertragung schiefgehen. aber was****?
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken [C#] komische Probleme bei Sockets? oder mach ich was falsch?-fuu-fehler.png  
    Geändert von fredlllll (18.06.11 um 17:46 Uhr)
     

  2. #2
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Hi

    Betriebssystem? Code? TCP/UDP? ...?
    Ohne tech. Infos können wir nur raten.

    Es ist im Übrigen normal, dass mehrere Sends zusammengefügt bzw. auseinandergerissen werden.
    Für die Sockets zählen nur die Byte; wo eine Nachricht anfängt und aufhört ist komplett egal..

    Gruß
     

  3. #3
    fredlllll fredlllll ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    120
    os win7 home premium 32 bit *schäm*
    alles Tcp
    und der code ist wahrlich etwas groß um ihn ins forum zu posten...
    und wiegesagt, der kern rechnet richtig, nur die nachrichten kommen einfach falsch an.

    gibt es dann eine methode womit man eben nachrichten in einem schicken kann**** oderzumindest etwas dass er mir meine nachrichten nicht zerhackt. jemand hat mir erzählt, dass man die sockets in c# auch wie die in java mit stream readern und writern benutzen kann. nur wie geht das?
     

  4. #4
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Mit
    Code :
    1
    
    new NetworkStream(socket, true)
    bekommst du eine Stream-Instanz, die von den ganzen Readern etc weiterverwendet werden kann.

    Das true bedeutet, dass mit dem Schließen dem Streams auch der Socket mitgeschlossen wird.
    Wenn false muss das einzeln gemacht werden.

    Gruß
     

  5. #5
    fredlllll fredlllll ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    120
    vielen dank =) dann werd ich mich mal daran machen es zu implementieren. Wenn der Generator fertig ist, poste ich den source hier. halt als zip
     

  6. #6
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Schreib doch mal probeweise die Daten, die die Clients berechnen, in eine Datei und kopiere die Datei danach manuell rüber auf den Hauptrechner und ließ die Daten dann wieder ein. Wenn dein Bild jetzt immer noch kaputt ist, dann liegt der Fehler nicht in der Übertragung, sondern woanders. Und wenn das Bild richtig aussieht, dann liegt es definitiv an der Übertragung.
     
    hihi = -h²

  7. #7
    fredlllll fredlllll ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    120
    Zitat Zitat von fredlllll Beitrag anzeigen
    /edit: ich hab jetzt mal das generierte vom kern lokal gespeichert. und das ist fehlerlos. also muss irgendwas bei der übertragung schiefgehen. aber was?
    *hust hust*

    nochdazu hab ichs jetz eh mit dem streamreader gemacht und damit funktioniert es, muss jetzt nur noch das ganze so zambasteln, dass es nicht immer abstürtzt
     

Ähnliche Themen

  1. Was mach ich falsch
    Von schatten8000 im Forum Cinema 4D
    Antworten: 5
    Letzter Beitrag: 06.12.09, 21:15
  2. Was mach ich falsch!
    Von BreitBild im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 09.07.07, 17:12
  3. Antworten: 1
    Letzter Beitrag: 19.12.05, 04:16
  4. W3C was mach ich falsch?
    Von nice2kn0w im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 25.11.05, 06:27
  5. was mach ich falsch?
    Von wo0zy im Forum PHP
    Antworten: 7
    Letzter Beitrag: 10.10.01, 22:46

Stichworte