以下都是讨论 TCP 连接第一个疑问: 建立好 Socket 后服务端进入 Accept 状态,当客户端发起一个连接后,如果此时客户端没有 Send 数据,服务端如何知道什么时候应该 Receive 数据呢? 第二个疑问: 如果客户端不停的向服务端 Send 数据,但是服务端不 Receive,会发生什么情况,那些发送来数据会存放在哪里?还是会被丢弃?
解决方案 »
- Strust2中迭代和if结合取值判断 急急@急!
- 若不用类型推断此处类型因该改为什么c#
- 如何让keydown事件只触发一次?
- 请问这个问题是不是由于C#调用DLL引出的?
- 为什么我的datareader显示两遍呢?
- 急!急!急!关于Form窗体连接数据库的问题!
- c#后台弹窗窗口Response.Write("<scritp>window.open('information_change.aspx','_blank')</script>");
- C#连接ORACLE数据库创建新表时:无效操作连接被关闭
- Dim buf1(200) As Byte 在C#中应该怎么写?
- 立志学习!!!散分勉励!!!
- =============wince里面,连接sdf失败============
- 水晶报表字段可以实现这样的功能吗???
第2个方法 异步来接收, 使用异步更简单一些第二个疑问: 如果客户端不停的向服务端 Send 数据,但是服务端不 Receive,会发生什么情况,那些发送来数据会存放在哪里?还是会被丢弃?
最终还是都回丢弃的.
2、多次发送数据如果服务器不接收,下次就会发送失败
在接下来的两个域中,序列号和确认号是TCP实现可靠连接的要害。当建立一个TCP连接时,发送方主机发出一个随机的初始化序列号给初始化器,初始化器将其加1后送回确认域的起始器,这意味着下一个字节可以发送了。一旦数据开始流动,序列号和确认号将跟踪已发送了那些数据,那些数据已被确认。因为每个域都是32位,总共可以有232个值,所以每个域的范围是:0~4294967295,当超过上限时回到0。 TCP的传输机构有多个定时器。当一个包发送时,重发定时器开始计数;当收到确认信号后,重发定时器停止计数。假如超过设定时间段还没有收到确认信号,就重发该包。一个比较棘手的问题是如何设置该时间段。假如太长,当网络传输错误增加时将导致不必要的等待时间;假如太短,就会产生过多的重复包从而降低网络的反应时间。现代TCP协议根据实际情况对重发定时器进行动态设定。 不管重发过程执行得多么有效,很少的丢失包就能严重地降低TCP连接的流量。每个未收到的包或包的片段只会在重发定时器超时的时候才会丢失。在数据重发时,接收过程一直在递送这些重发的数据,这样就使总体的数据传输陷于停顿,直到丢失的数据被取代为止。这些重发过程导致基于TCP的连接有时处于不稳定状态。