shuangsexing 发表于 2011-12-19 19:13:49

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

中间这段代码怎么写

chenronting 发表于 2011-12-19 19:32:26

在服务器处理别的数据时,就给所有其它的客户端发送一个正在处理数据的信息,处理完了,就可以再叫他们发来了。

shuangsexing 发表于 2011-12-19 19:59:23

对,差不多。不过要有那码怎么写。

miosec 发表于 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,此时可以接收任何客户端数据。

Qokelate 发表于 2011-12-20 11:56:16

何不换种思路,客户端先发个接受标志到服务端,服务端同意了才发送数据,就和TCP通讯一样

chenronting 发表于 2011-12-20 21:14:53

回复 6# Qokelate


    这个好,先判断是否发送!

shuangsexing 发表于 2011-12-23 13:59:48

我那个情况是那样;如果1正在处理数据还没完,这时2客户端发送数据过来了。服务端就放弃1处理数据,接收2的数据处理,以此类推。
页: [1]
查看完整版本: TCP当客户端1发送数据过去还没处理完时,客户端2发数据过来,服务端屏蔽它不接收数据