QTcp通信的问题。

刀刀亮 2011-11-25 09:08:37
我想做一个监控的东西,在处理通信这一块我想用Socket。
废话不说了,上问题:
1.我把监控端做服务端,被监控端做客户端,然后客户端有多个,我如何才能在服务端确定是哪个客户端发来的数据?
...全文
604 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccaaiigg 2011-11-25
  • 打赏
  • 举报
回复
我插,用几个字节来标志是哪个客户端发过来的
xiachm 2011-11-25
  • 打赏
  • 举报
回复
看看线程中的代码,在建立连接成功后,Debug一下peerAddress的输出,如果你使用不同的机器来连接服务器,它的输出肯定是不一样的呀。
刀刀亮 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiachm 的回复:]

在帮助文档中找到,QTcpSocket,在See also里面找到Threaded Fortune Server Example

代码非常少,非常简单。虽然里面没有直接出现peerAddress,但我相信你看完后就知道应该把它放哪里了。
[/Quote]
你好,我把手册里的例子看完了,它在服务端对每一个连接新建一个线程来进行处理连接。可是我还是有点犯晕,不知道怎么判断是哪个客户端连接发来的数据,根据进程ID?还是根据什么啊?我在服务端要实现的是,对每一个客户端发来的数据分别存储,然后进行分析处理。能给点意见吗?谢谢……麻烦了
xiachm 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zqlee1216 的回复:]

服务器端接收socket的client指针,用过QStringList 来就来存储这些指针, 如:
QStringList clients; // 定义在.h文件
//新client登记。
QTcpSocket *client = new QTcpSocket(this);
client->setSocketDescriptor(socketfd);
clients.inser……
[/Quote]

天哪,这都是什么!

你最好也去帮助文档中找到QTcpSocket,在See also里面找到Threaded Fortune Server Example
xiachm 2011-11-25
  • 打赏
  • 举报
回复
在帮助文档中找到,QTcpSocket,在See also里面找到Threaded Fortune Server Example

代码非常少,非常简单。虽然里面没有直接出现peerAddress,但我相信你看完后就知道应该把它放哪里了。
zqlee1216 2011-11-25
  • 打赏
  • 举报
回复
服务器端接收socket的client指针,用过QStringList 来就来存储这些指针, 如:
QStringList clients; // 定义在.h文件
//新client登记。
QTcpSocket *client = new QTcpSocket(this);
client->setSocketDescriptor(socketfd);
clients.insert(client);
//接收某个客户端
QTcpSocket *client = (QTcpSocket*)sender();
这个client可以在clients中找到。
刀刀亮 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiachm 的回复:]

QAbstractSocket::peerAddress()
[/Quote]
可否的详细点,麻烦了……
xiachm 2011-11-25
  • 打赏
  • 举报
回复
QAbstractSocket::peerAddress()
刀刀亮 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xiachm 的回复:]

老兄,TCP是有连接的,系统会自动把收到的数据存放到所在连接的缓冲区里,不用你管。就算你在一个多线程环境里也会确保连接间各自独立。

你别光看代码,要动手写一写。
[/Quote]
教训的即是,本来就晕乎,易感冒就更晕乎了。谢谢前辈提醒……
敲代码去……结贴了
xiachm 2011-11-25
  • 打赏
  • 举报
回复
老兄,TCP是有连接的,系统会自动把收到的数据存放到所在连接的缓冲区里,不用你管。就算你在一个多线程环境里也会确保连接间各自独立。

你别光看代码,要动手写一写。
刀刀亮 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ccaaiigg 的回复:]

客户端发送完了之后再发送一个标识发送完毕的信息,服务端收到这个标志确认之后才处理吧引用 9 楼 xiaoliang_1 的回复:

引用 8 楼 ccaaiigg 的回复:

我插,用几个字节来标志是哪个客户端发过来的

当其中一个客户端的报文没有发完中间又有另一个客户端发一些报文,怎么办?如何解析?……
[/Quote]
在第一个客户端发送数据的过程中,第二个客户端也在发送数据的情况呢?不能不开始标记位和结束标记位都设置成独一无二的吧。所以还是很纠结呢
ccaaiigg 2011-11-25
  • 打赏
  • 举报
回复
客户端发送完了之后再发送一个标识发送完毕的信息,服务端收到这个标志确认之后才处理吧[Quote=引用 9 楼 xiaoliang_1 的回复:]

引用 8 楼 ccaaiigg 的回复:

我插,用几个字节来标志是哪个客户端发过来的

当其中一个客户端的报文没有发完中间又有另一个客户端发一些报文,怎么办?如何解析?……
[/Quote]
刀刀亮 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ccaaiigg 的回复:]

我插,用几个字节来标志是哪个客户端发过来的
[/Quote]
当其中一个客户端的报文没有发完中间又有另一个客户端发一些报文,怎么办?如何解析?……

16,201

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧