几个问题,SOCKET 高手指点一下-1 TCP真的不会丢包吗,不会出现数据出错的情况吗? 2 大家都说要控制好SOCKET,关键是设置setsockopt函数

  • 主题发起人 主题发起人 NetNoCenter
  • 开始时间 开始时间
N

NetNoCenter

Unregistered / Unconfirmed
GUEST, unregistred user!
几个问题,SOCKET 高手指点一下-1 TCP真的不会丢包吗,不会出现数据出错的情况吗? 2 大家都说要控制好SOCKET,关键是设置setsockopt函数,那在TCP应用中到底设置那几个参数比较重要呢? -不好意思,没分了,可到其他贴子领取(5分)<br />1 TCP真的不会丢包吗,不会出现数据出错的情况吗?
2 大家都说要控制好SOCKET,关键是设置setsockopt函数,那在TCP应用中到底设置那几个参数比较重要呢,SO_SNDBUF?SO_RCVBUF?TCP_NODELAY? 发送缓冲区设置为多少比较合适?接收缓冲区设置为多少比较合适?TCP_NODELAY为真比较合适还是假比较合适?一般默认参数(SO_SNDBUF=8192;SO_RCVBUF=8192;TCP_NODELAY=False)都有其通用性,那在哪种情况下需要改动这些参数来适应自己的需要,比如,在数据包大于1460(TCP一次发送的最大包长度)时,需要改动这些参数吗?改为多少比较合适?数据发送比较快的时候,需要改动这些参数吗?改为多少比较合适?
 
你写什么呢??

为何要用那些api函数
 
同意楼上的说法,在对socket api不熟悉的情况下,还是用delphi的serversocket 和clientsocket控件吧。
 
问题是用了这两个东西后,在特殊情况下不是很理想啊,不熟悉才问啊
 
一点浅见,起起抛砖引玉的作用吧 [:D]
1.TCP不是不会丢包,只是丢包比率比较小。在局域网内,因为条件较好,基本上不会丢包。
2.个人觉得单纯修改缓冲区的大小并没有多大用处,关键还是在于收发机制的控制(关于这一点,TServerSocket没有winsoc API灵活)。
3.在客户端比较多(&gt;200)或是数据交换比较频繁的情况下,服务器用winsock API写效率比较高。
 
TCP会丢包. 但是问题的关键在于TCP是面向连接的通信, 操作系统实现的协议传输层驱动会自动纠正错包和丢包, 对于客户应用程序来说, 丢包的纠正是透明的, 也就是说在应用程序不知道的情况下, 丢失的数据包已经被重新传回, 并正确排序了, 对于客户应用程序来说, 可以这样认为: TCP不会丢包.
TCP的连接的参数设定一般不需要去修改, 你还在问TCP是否丢包的问题, 那么这个问题对于你来说没有考虑的必要. 如果之后想了解, 去找一本高级TCP/IP编程的书看看. 不要指望在这里能有人给出详细的回答. 想回答也回答不了, 内容太多了. [:D]
 
后退
顶部