TCP和UDP的取舍

tigerjacky 2006-03-23 05:06:07
现在有300个客户端向服务器发包,短连接.获得回报,即可.同时并发连接数不大.准备用Indy控件
问:
1).使用TCP还是UDP
2).什么是"心跳***"
3).如果用TCP,我发包前连接,收到回报后马上断开连接,这样设计合理么?频繁操作会有什么影响么?
4).如果发包过程中连接中断,要如何处理呢(比如用IdTcpXXX)
...全文
292 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2006-03-24
  • 打赏
  • 举报
回复
TCP比较可靠
而且能方便通过FW的
tigerjacky 2006-03-24
  • 打赏
  • 举报
回复
up
junshu2000 2006-03-24
  • 打赏
  • 举报
回复
我在局域网,曾经用过UDP,它的问题是发送端只管发送,不管接受端是否收到,如果网络的条件不好,就不要用了,有一次多加了一个集线器,竟然就丢包了。不过我必须用UDP,因为是实时系统,需要迅速发送大量数据。TCP没有用过,但应该更加安全,如果数据量不大,建议用它。再一个,许多internet上的软件用UDP协议传送数据,不知道怎么保证数据安全的
cjianwen 2006-03-23
  • 打赏
  • 举报
回复
关注,顶!
bluz 2006-03-23
  • 打赏
  • 举报
回复
如果服务器有固定IP,用UDP;如果服务器是从路由器端口映射过来的,用TCP
myth_2002 2006-03-23
  • 打赏
  • 举报
回复
在internet上,丢包(不管是TCP还是UDP)比在局域网里严重多了
myth_2002 2006-03-23
  • 打赏
  • 举报
回复
一,如果是短连接,并且数据量不大<50K,还是用UDP比较节约。
二,“心跳”就是服务器测试客户端是否还连接的办法,如果是用TCP就不用了,TCP一方断开连接,另一方会得到通知(就是recv函数会返回SOCKET_ERROR).
三,频繁建立断开TCP连接,服务器会耗费很多资源(TCP比UDP可靠,但是耗资源多)
四,TCP上面已经说了,如果用Indy控件的话,在控件的onDisconnected事件会被触发。UDP就要靠服务器定期发一个消息(心跳包)给客户端,客户端必须在一定时间内回复,否则就认为失败。
tigerjacky 2006-03-23
  • 打赏
  • 举报
回复
我是在Internet上,这有什么关系么?
5).如何判断WriteBuffer()是否成功?还有ReadBuffer()
Blakhawk 2006-03-23
  • 打赏
  • 举报
回复
如果在内网建议采用TCP.
心跳就是隔一段时间同步一次.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧