• 3622阅读
  • 4回复

[提问]异步多客户端通信的标识问题 [复制链接]

上一主题 下一主题
离线inside
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-20
最近在用QTcpServer QTcpSocket写一个异步通信的库


遇到一个问题


比如说异步情况下

服务端监听得到可连接的客户端后,与客户端通信。
假如有多个客户端,那么服务端会接收到N个客户端  把这些用作连接的socket存放在list里面。
供通信使用。

但是socket存放到list里面的时候我没有一个标识来区分 哪个socket对应于哪个客户端。

比如将来 A客户端要发信息给B客户端的时候。那么 A需要把消息发给服务端,然后服务端发给B。

如果没有标识,那么就没有办法定向的转发。而且某个客户端失去连接的时候,服务端也没有办法知道是哪个客户端失去了连接。


请教诸位在这种情况下的解决方案。就是标识问题,如何标识一个客户端。

谢谢了
离线ninsun

只看该作者 1楼 发表于: 2011-12-21
…………
QMap<QString, socket>;
这样不行吗?
还不行?
struct abcd
{
.....
.....
....
};
QMap<QString, abcd>;
这样总够了吧...
离线inside
只看该作者 2楼 发表于: 2011-12-21
回 1楼(ninsun) 的帖子
QMap是可以,我现在也是用的QMap
问题是  QMap<QString, socket>;

这个QString存什么东西.。。。。我现在问的就是存什么东西  拿什么作为标识
离线ninsun

只看该作者 3楼 发表于: 2011-12-22
随便什么都可以的啦……例如一个GUID啥的.....
一般不要过度依赖tcp还是什么协议自己的识别方式,最好是在通讯协议里把一切都写明了,这样收到一个消息以后就立刻知道这个消息来自哪里,是否需要回复,需要回复什么消息,回复地址是哪里了...
也就是想办法把消息收发和消息内容的处理完全独立起来
离线inside
只看该作者 4楼 发表于: 2011-12-22
回 3楼(ninsun) 的帖子
哦,,我明白了  谢谢指导
快速回复
限100 字节
 
上一个 下一个