客户端建立一个socket,且仅有这一个socket,用这个socket同时send,然后服务器返回数据,客户端多线程recv时几种数据混乱了。比如:客户端同时请求两个接口,1、获取地址 2、获取温度
第一个接口服务器返回数据:成都市金牛区
第二个接口服务器返回数据:二十八摄氏度
客户端的那一个socket接收的数据可能就是这样的:
成都市摄氏度
二十八金牛区
请问怎么解决这个单socket,多线程同时请求数据的问题呢?
PS:一个接口建立一个socket可以解决这个问题,但是我希望一个socket搞定
一个客户端socket 多线程请求数据,recv时数据混乱
答案:2 悬赏:50 手机版
解决时间 2021-04-04 20:23
- 提问者网友:沦陷
- 2021-04-04 09:45
最佳答案
- 五星知识达人网友:平生事
- 2021-04-04 10:49
之所以接收数据时发生混乱,是因为,不能通过收到的数据分辨出它是哪个请求对应数据。
处理这类需要在同一个“通道”(socket) 请求不同服务的问题时,一个常见的做法是,在返回的数据中标识出这个数据对应的请求是哪个。
比如,req: id->1,返回是 rsp: id->1; req: id->2,返回是: rsp: id->2
然后,客户端根据返回的 id 找到对应的请求,就可以区分出数据,就不会混乱了。
加锁只是保证同一时间socket 只处理一个请求,不能保证客户端能够正确区分出请求对应的返回数据。
处理这类需要在同一个“通道”(socket) 请求不同服务的问题时,一个常见的做法是,在返回的数据中标识出这个数据对应的请求是哪个。
比如,req: id->1,返回是 rsp: id->1; req: id->2,返回是: rsp: id->2
然后,客户端根据返回的 id 找到对应的请求,就可以区分出数据,就不会混乱了。
加锁只是保证同一时间socket 只处理一个请求,不能保证客户端能够正确区分出请求对应的返回数据。
全部回答
- 1楼网友:行路难
- 2021-04-04 11:19
给服务器端套接字加锁。
再看看别人怎么说的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯