2016-07-29 30 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