2016-07-29 32 views
0

我在我的程序中使用套接字讓客戶端與證明者即服務器進行通信。首先,客戶端將本地文件發送給證明者,然後成功。然後,客戶端將該文件的簽名發送給證明者,但該程序停滯不前。我認爲證明者的recv函數不能接收任何數據,所以失敗了,但我不知道它爲什麼會發生。任何人都可以解釋嗎?使用套接字來溝通的程序卡住

/* 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

證明者的'recv'函數在哪裏? –

+0

證明者的recv功能太長。 – sunwhut

+0

證明者如何知道文件何時結束並且簽名開始?換句話說:你的消息協議是什麼樣的? –

回答

0

我建議你在調試模式下啓動客戶端和服務器,以瞭解究竟發生了什麼。就目前而言,很難說通信失速的原因究竟是什麼。可能存在成幀問題,即服務器等待更多數據,而客戶端認爲它已經發送了所有內容。我看到很多案例,其中recv被假定爲框架,它不適用於TCP。

+0

是的,我想你明白了。證明者使用一段時間的流通來接收命令,然後執行相應的操作來接收數據。我認爲發行中的recv功能沒有收到命令,所以它卡住了,但不知道爲什麼。 – sunwhut

+0

如果您發佈了證明者和客戶端的源代碼,我可能會提供幫助,但現在感覺就像猜測一樣。 – user1202136

+0

源代碼太長了,實際上這是一個小項目。如果你不介意,我可以通過電子郵件發送給你嗎? – sunwhut