异步TCP Sokcet丢包的问题
现在在做的项目用到了异步Socket,采用TCP
自己定义了一个结构体进行数据的封装和传输(这里简称 MyStr吧,目前大小是275字节)
服务器端程序有一个客户端Socket的列表(ClientList),存储联接进来的Socket
服务器只要接收到一个MyStr后,就会foreach访问ClientList里面的Socket把接收到的数据马上分发到其余的客户端,如下所示
foreach(SocketObject so in ClientList)
{
so.Sock.Send(sendBuf); //调用Socket的同步send方法
}
目前同时最多有16个客户端连接进服务器,就是接收到一次数据以后,会调用15次的Send来分发到其他客户端
对每一个从服务器分发出去的包添加了一个序列号,从1递增
客户端接收到包的时候会比较 本次接收的包的序列号 与 上一次接收到的包的序列号是否一递增1的关系,如果不是说明中间丢包了,就会要求服务器重发丢掉的包
测试过程发现有出现丢包的现象,通过重发能够解决
问题
1. 采用TCP Socket应该是可靠的连接,查了相关资料都说TCP保证不丢包,不用去关注这些,但是不保证接收端正确接收,请问这是什么意思。
2.上面我的那种情况是丢包吗?为什么会出现这种情况呢?
3.上面我的那种情况我发现好像是在通信比较频繁的时候会出现得比较多,是否和通信的频率有关
4.我这种回发的机制是不是 不是很好,是的话如何改进?
5.丢包(或者说是接收不正确)是否与缓冲区设置的大小有关?我用的是默认值8192