Qt局域网聊天,服务器端:
void TcpServerWidget::on_startServerButton_clicked()//点击开启服务器按钮
{
server = new QTcpServer;
server->listen(QHostAddress::Any,51234);
connect(server,SIGNAL(newConnection()),this,SLOT(newConnectSlot()));
}
void TcpServerWidget::newConnectSlot()
{
socket = server->nextPendingConnection();
connect(socket,SIGNAL(readyRead()),this,SLOT(readMessageSlot()));
}
第二个函数中的:
socket = server->nextPendingConnection();我看了Qt的帮助文档,但是还是不是很懂,希望大家可以讲解。
另外:
当server监听到有连接时,就调用newConnectSlot()槽函数,如果调用了一次之后,再监听到了,也会调用这个槽函数,那第一次调用的槽函数是否就失效了?
我在电脑上测试了一下,是:
如果开启一个服务器端,两个客户端,那样第一个客户端就不能和服务器正常通信了。应该怎么做才能让多个客户端连接呢?
另外:
当我点击开启服务器按钮的时候,就调用了void TcpServerWidget::on_startServerButton_clicked()这个槽函数,然后这个槽函数去做:connect(server,SIGNAL(newConnection()),this,SLOT(newConnectSlot()));连接信号和槽。
那我开启第二个客户端,连接服务器的时候,为什么也会使用到connect这个连接呢?没有地方使用到“开启服务器”按钮呀。
万分感激!
新手,我发错版了另外帖子:http://bbs.csdn.net/topics/391834839
------解决思路----------------------
1、如果开启一个服务器端,两个客户端,那样第一个客户端就不能和服务器正常通信了。应该怎么做才能让多个客户端连接呢?
你可以尝试着吧之前监听到的ip保存下载,当想跟那个ip发送数据的时候就发送至你之前保存的ip.
2、?一旦启动listen函数:server->listen(QHostAddress::Any,51234);服务器就会不断的监听51234端口,当有新的连接的时候就会触发newConnection信号。
------解决思路----------------------
第一点
socket?=?server->nextPendingConnection();
这个不是赋值语句吗?不覆盖才奇怪吧?
用一个MAP保存一下这个socket吧
另外为了内存不泄露,这个socket 发出disconnect的时候 在Map里删除再deletelate自身
第二点好像没看懂。。。