Redian新闻
>
网络编程如何进行错误处理
avatar
网络编程如何进行错误处理# Unix - 噫吁兮,危乎高哉
h*c
1
比如我实现一个很简单的协议,client向server发送一行字符串,server收到后向
client发送一行字符串作为回应,client收到回应后再发送下一行字符串。
(发送的字符串和响应之间有对应关系)
如果client发送一行后很长时间没有收到回应,
是否说明发送的信息没有到达server,或者server的回应没有返回到client。
TCP/IP能保证信息一定传送到client或者server吗?是有一定的重试次数吧。
如果client很长时间没有收到回应,应该怎么处理?重发吗?还是不做处理一直等?
关键我想知道如何判断信息确实在传送过程中丢失了,这时候才应该重发吧。
我对TCP/IP的一些概念还不是很清楚,哪位能给详细说说,谢谢。
avatar
m*m
2

TCP does.
If the peer process dies, a FIN is sent from server. If you
try to send again,
you receive a SIGPIPE.
If the host dies, timeout occurs, the socket's pending error
set to ETIMEOUT.
If the host is not reachable, timeout occurs, and error set
to EHOSTUNREACH.
I would select() with timeout on read socket. This add
another application
level control. But, it is not necessary.

【在 h*******c 的大作中提到】
: 比如我实现一个很简单的协议,client向server发送一行字符串,server收到后向
: client发送一行字符串作为回应,client收到回应后再发送下一行字符串。
: (发送的字符串和响应之间有对应关系)
: 如果client发送一行后很长时间没有收到回应,
: 是否说明发送的信息没有到达server,或者server的回应没有返回到client。
: TCP/IP能保证信息一定传送到client或者server吗?是有一定的重试次数吧。
: 如果client很长时间没有收到回应,应该怎么处理?重发吗?还是不做处理一直等?
: 关键我想知道如何判断信息确实在传送过程中丢失了,这时候才应该重发吧。
: 我对TCP/IP的一些概念还不是很清楚,哪位能给详细说说,谢谢。

avatar
h*c
3

谢谢,按我的理解:TCP能保证请求和响应传输到client和server,
如果出错,表示机器崩溃或者网络出了问题,这种情况下socket调用
如read,write会返回错误代码。这时候我应该
直接断开连接,终止程序,让用户自己去重新连接,还是在程序里自
动重新连接而不让用户
感觉到出错了。我想直接断开连接,终止程序比较简单,也不用去处
理网络出错随即又恢复正常的情况。
你说的用select进行超时控制,如果select超时了是否有可能信息还
在传输过程中,再过一会就会传送过来。这种情况下,我是否应该不
终止程序而重新发送信息,还是给用户一个提示,让用户自己去重发
请求,但还保持连接不断开。这样做合理吗?
再次感谢你的帮助。

【在 m*******m 的大作中提到】
:
: TCP does.
: If the peer process dies, a FIN is sent from server. If you
: try to send again,
: you receive a SIGPIPE.
: If the host dies, timeout occurs, the socket's pending error
: set to ETIMEOUT.
: If the host is not reachable, timeout occurs, and error set
: to EHOSTUNREACH.
: I would select() with timeout on read socket. This add

avatar
m*m
4

You can have two timeout values. When the shorter one
expires,
resend. When the longer one expires, prompt for user
attention.
For late packet after resend, just drop them.

【在 h*******c 的大作中提到】
:
: 谢谢,按我的理解:TCP能保证请求和响应传输到client和server,
: 如果出错,表示机器崩溃或者网络出了问题,这种情况下socket调用
: 如read,write会返回错误代码。这时候我应该
: 直接断开连接,终止程序,让用户自己去重新连接,还是在程序里自
: 动重新连接而不让用户
: 感觉到出错了。我想直接断开连接,终止程序比较简单,也不用去处
: 理网络出错随即又恢复正常的情况。
: 你说的用select进行超时控制,如果select超时了是否有可能信息还
: 在传输过程中,再过一会就会传送过来。这种情况下,我是否应该不

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。