SOCKET的疑问,大家帮帮忙啊!

jiezi316 2008-06-18 10:45:26
小弟刚学习 SOCKET(TCP)下几点疑惑:
1,据说在并发大的时候会"粘包",但客户端在发送完信息后,服务器端接受信息时,虽然是同一个端口,对服务器来说这个连接实际上是独立的,不会和其他连接冲突,那么接受这条连接的数据会"粘"其他连接上的包数据吗?我觉得不可能吧。

2,是否所说的"粘包"是指一个客户端,连接服务器端后,短时间内多次执行SEND发送小数据量包(据说TCP为了提高效率有可能先将这几个包先缓冲然后一起发送出去),这些包都是同一条连接的,这样就产生了粘包现象?

3,为了增大并发量,是采用多连接还是单一长连接,好像多连接的话,就算是异步的,在接收数据没有返回的时候实际上是连接上的吧,这样每个连接都不会于其他连接相冲突,但如果连接多了估计服务器吃不消吧?如果是单一长连接,也就是不停的send,那么该怎么接收返回数据呢?
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 na_he 的回复:]
我只想说的是"粘包"的实质是因为TCP/IP协议会把用户的数据报组织成合适的大小一次发送,因为太大或者太小兜会不能很好的利用网络资源。因为我们在发送数据时都会制定自己简单的协议,那么你只要按照自己的协议接受收据就可以了,一般都不会产生丢包或者其他的问题了,呵呵!
[/Quote]
粘包不是组成合适大小的包一次发送,而是发送和接收中间的时间差。实际上,除了一次性发送,还有分多次发送的情况。
BIGBIRDINWOODS 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 flm007 的回复:]
帮忙顶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·····
[/Quote]
na_he 2008-06-18
  • 打赏
  • 举报
回复
我只想说的是"粘包"的实质是因为TCP/IP协议会把用户的数据报组织成合适的大小一次发送,因为太大或者太小兜会不能很好的利用网络资源。因为我们在发送数据时都会制定自己简单的协议,那么你只要按照自己的协议接受收据就可以了,一般都不会产生丢包或者其他的问题了,呵呵!
flm007 2008-06-18
  • 打赏
  • 举报
回复
帮忙顶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·····
僵哥 2008-06-18
  • 打赏
  • 举报
回复
1,2.粘包是指同一个连接上面多次发送数据,中间的间隔时间,与网络传输构成的一种不可预期性,在没有加以“包”标识的情况下如果“包”长不固定,接收端将可能会把这些连续的“包”拆得七零八散。只需要增加一个标识,比如先发送一个长度,比如说固定长度,又比如说增加一个分隔符,比如某些协议当中用到的换行符等等
3.单连接(单客户)上面的处理能力并不是服务器考虑的根本,当然在需要抢资源的情况下,比如我们下载文件,那时采用多连接是比较有利的。连接与连接之间是互不相干涉的,只是外部数据的一个同步需要做好。在实际应用环境当中,不同的业务不同的时间段压力会不一样。1000个连接当中,也有可能同时活动的只有100个。
scq2099yt 2008-06-18
  • 打赏
  • 举报
回复
CSDN怎么了?
发送完后刷新还看不到自己的回复的贴子,重发一次后两次全看得见了。
scq2099yt 2008-06-18
  • 打赏
  • 举报
回复
粘包问题只需要定义简单的通信协议就可以解决,比如:帧头、帧长、校验和等,如果不符合要求就需要重发或者循环等待。
scq2099yt 2008-06-18
  • 打赏
  • 举报
回复
有简单的协议就可以解决粘包问题,比如:帧头、帧长、校验和等,如果不符合要求就需要重发。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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