首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于Socket阻塞和非阻塞的有关问题

2013-09-24 
关于Socket阻塞和非阻塞的问题都知道Sokcet阻塞情况下,发送数据需要得到返回值才会继续接下来的操作,而非

关于Socket阻塞和非阻塞的问题
都知道Sokcet阻塞情况下,发送数据需要得到返回值才会继续接下来的操作,而非阻塞发送完数据之后不需要得到返回值,接着做接下来的操作,现在有个问题,如下,

比如说我向服务器发送一个文件,如果文件发送成功,我就删除掉本地的文件,如果失败就不做操作,接下来就是问题所在了。
 
情况1:如果我使用阻塞式,发送文件之后,我会等待一个返回值,如果成功就删除本地数据,失败不做操作。但会遇到一种情况,可能因为网络问题,发送文件之后,可能一直没有得到返回值,哪么我的程序就会一直处于等待的时间,这里就很尴尬。

情况2:如果我使用非阻塞式,这里我有个问题,因为我需要得到返回值才能知道服务器有没有接收成功,再对本地的文件做删除操作,有没有一种可能,我发送数据之后,发送成功了,但没有返回值,这是我不解的,

路过的都给点建议吧,关于Socket阻塞和非阻塞的有关问题 socket 数据 服务器 网络
[解决办法]
设置 timeout
[解决办法]
显然 timeout也是无法确保的!
最好服务端成功接收后,回复发送端一个ack,待发送端收到ack后再作删除操作!
如果在一段时间内没有接收到ack的话,则认为是失败的,重新给服务端发送文件!
[解决办法]
要是我来设计这个功能,我会这么做。
设计三个API,一个是上传,可以没有返回值,也可以有返回值;一个是查询服务器端的文件的状态(大小,checksum等);一个是删除本地文件。
然后流程就是:
upload_file_to_server
checksum = query_file_on_server
if checksum == local_checksum
  delete_local_file
else
  // retry or something
[解决办法]
发送数据之后,发送成功了,但没有返回值

----这种情况,可以设置一个timeout呀
[解决办法]

引用:
要是我来设计这个功能,我会这么做。
设计三个API,一个是上传,可以没有返回值,也可以有返回值;一个是查询服务器端的文件的状态(大小,checksum等);一个是删除本地文件。
然后流程就是:
upload_file_to_server
checksum = query_file_on_server
if checksum == local_checksum
  delete_local_file
else
  // retry or something

这样感觉复杂了,如果通过另外一条信令去确认当前文件状态的话,可能需要对应ID号去确定对应的文件状态,还是要回复的!而且如果发送失败的话,那还是得重新来过

单条发送,确认发送状态比较靠谱
[解决办法]
文件通过socket传过去了,与文件在server已经落磁盘了,还有很长的一段路要走。
[解决办法]
只能单向通讯的系统等于不能通讯!
[解决办法]
引用:
只能单向通讯的系统等于不能通讯!


真不知道没有管道这种最简单的单向通信方式,Linux的世界会是什么样子。

热点排行