2016-07-29 13 views
0

Ich verwendete Socket in meinem Programm, um den Client mit dem Prüfer, nämlich den Server kommunizieren zu lassen. Erstens sendet der Client eine lokale Datei an den Prüfer, und es ist erfolgreich. Dann sendet der Client Signaturen dieser Datei an den Prüfer, aber das Programm ist hängengeblieben. Ich denke, die recv Funktion des Prover kann keine Daten empfangen, so dass es fehlgeschlagen ist, aber ich weiß nicht, warum es passiert ist. Kann mir das jemand erklären?das Programm mit Socket zu communicat hat stecken

/* send file */ 
if (on_cmd_send_file_client(sockProver, username, party, filename, blocksize, blocknum)) { 
    printf("%s(%d)-%s:%d-%s\n", __FILE__, __LINE__, __FUNCTION__, errno, strerror(errno)); 
    return (errno ? errno : -1); 
} 

/* send signature */ 
length = pairing_length_in_bytes_G1(pairing); 
if (on_cmd_send_sig_client(sockProver, username, party, filename, length, blocknum)) { 
    printf("%s(%d)-%s:%d-%s\n", __FILE__, __LINE__, __FUNCTION__, errno, strerror(errno)); 
    return (errno ? errno : -1); 
} 
+0

Wo ist die 'recv'-Funktion des Provers? –

+0

Die Recv-Funktion des Prover ist zu lang. – sunwhut

+0

Woher weiß der Prüfer, wann die Datei endet und die Signaturen beginnen? Mit anderen Worten: Wie sieht Ihr Nachrichtenprotokoll aus? –

Antwort

0

Ich schlage vor, Sie starten sowohl den Client und einen Server im Debugging-Modus, um zu verstehen, was genau passiert. So wie es jetzt aussieht, ist es schwierig zu sagen, was genau der Grund für den Kommunikationsstand ist. Es kann ein Rahmenproblem geben, d. H. Der Server wartet auf mehr Daten, während der Client denkt, dass er bereits alles gesendet hat. Ich habe ziemlich viele Fälle gesehen, in denen angenommen wurde, dass recv Framing macht, was es nicht für TCP tut.

+0

Ja, ich denke du hast es verstanden. Der Prüfer verwendet eine Weile Zirkulation, um Befehl zu empfangen und dann entsprechende Operationen auszuführen, um Daten zu empfangen. Ich denke, die Recv-Funktion in der Zirkulation erhielt kein Kommando, also blieb sie hängen, weiß aber nicht warum. – sunwhut

+0

Wenn Sie den Quellcode des Provers und des Clients gepostet haben, kann ich vielleicht helfen, aber im Moment ist es wie Raten. – user1202136

+0

Der Quellcode ist einfach zu lang, und es ist ein kleines Projekt in der Tat. Wenn es Ihnen nichts ausmacht, kann ich Ihnen eine E-Mail schicken? – sunwhut