找回密码
 加入
搜索
查看: 2954|回复: 7

[网络通信] TCP当客户端1发送数据过去还没处理完时,客户端2发数据过来,服务端屏蔽它不接收数据

  [复制链接]
发表于 2011-12-19 19:13:49 | 显示全部楼层 |阅读模式
中间这段代码怎么写

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-12-19 19:32:26 | 显示全部楼层
在服务器处理别的数据时,就给所有其它的客户端发送一个正在处理数据的信息,处理完了,就可以再叫他们发来了。
 楼主| 发表于 2011-12-19 19:59:23 | 显示全部楼层
对,差不多。不过要有那码怎么写。
发表于 2011-12-19 20:13:24 | 显示全部楼层
有点类似winsock中阻塞型的通信
发表于 2011-12-20 00:16:39 | 显示全部楼层
本帖最后由 曼菲士 于 2011-12-20 00:19 编辑

其实服务端在处理消息时,是不会接收下一个数据包的,这时候数据包会在缓冲区里等待接收,当服务端处理完当前数据了,才会去缓冲区接收客户端2的数据进行处理。如果服务端处理数据要很久,建议加大缓冲区,但有个弊端,可能会出现数据堆叠问题,例如服务端处理客户端1数据时,客户端2和3发来的数据在缓冲区中就会连在一起,服务端接收时就会把2和3一起收了,这种问题会经常发生,需要写数据分隔的代码,或者采用多线程方式来写服务端。

如果你是用多线程编写的,那确实有必要处理客户端2的数据,避免接收的数据不处理,在服务端和客户端都分别写个代码,当服务器接收客户端1数据后设置个遇忙变量为1,然后去处理数据,当客户端2发数据给服务端时,服务端判断遇忙变量为1则给客户端2回复“我在忙”的信息,当客户端2收到“我在忙”时,就知道服务端忙,间隔一定时间再重发数据包,直到服务端闲为止。
服务端闲了就会设置遇忙变量为0,此时可以接收任何客户端数据。
发表于 2011-12-20 11:56:16 | 显示全部楼层
何不换种思路,客户端先发个接受标志到服务端,服务端同意了才发送数据,就和TCP通讯一样
发表于 2011-12-20 21:14:53 | 显示全部楼层
回复 6# Qokelate


    这个好,先判断是否发送!
 楼主| 发表于 2011-12-23 13:59:48 | 显示全部楼层
我那个情况是那样;如果1正在处理数据还没完,这时2客户端发送数据过来了。服务端就放弃1处理数据,接收2的数据处理,以此类推。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 16:27 , Processed in 0.077594 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表