Socket服务端使用多线程接受客户端发送的包(每个客户端开一个线程),并发时包会错乱,该怎么处理?
1个回答
展开全部
服务器端接受客户端发送的包,并发会错乱?
十多年开发过程中从未遇到过。何况您还是每个客户端开一个线程,那更不可能错乱了。
通常这种情况都是由于您代码中逻辑错误造成的。您不应该把问题归结为socket、并发或多线程,而应该在代码逻辑里找找原因。
您是否多个接受线程共用了同一个接收buffer?处理公共数据时是否加了线程锁?
描述太简单了,没法直接下定论。
十多年开发过程中从未遇到过。何况您还是每个客户端开一个线程,那更不可能错乱了。
通常这种情况都是由于您代码中逻辑错误造成的。您不应该把问题归结为socket、并发或多线程,而应该在代码逻辑里找找原因。
您是否多个接受线程共用了同一个接收buffer?处理公共数据时是否加了线程锁?
描述太简单了,没法直接下定论。
追问
找到问题了,原因是用s.getInputStream();来接收数据,发过来的包都连在一起,一旦发错了,哪后面解析就会出现错误,这种有没有好的解决方法?
追答
您应该每个线程用各自的缓冲区和处理段来接收,而不是共用同一个。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询