QT编程系列10--客户端的网络编程

本文介绍了QT客户端的网络编程,包括如何设计客户端界面,使用QTcpSocket进行连接,以及处理数据的槽函数。客户端通过connect按钮触发连接,利用myconnect函数连接指定IP和端口。当接收到数据时,QT的readyRead信号触发myread函数进行数据接收和处理。QT的非阻塞式信号与槽机制避免了多线程需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户端的网络编程

    上一篇文章,我们实现了服务器端程序的编写,首先创建一个服务器对象,然后使其处于监听的状态,当有新连接过来时,进行与新连接的连接工作。连接使用的是套接字socket类实现的对象,通过该类的write方法,定时1S发送数据到连接上的客户端。我们从中可以看出,这次网络通信首先是有客户发起的,那么客户端是怎么发送这个连接的了,以及连接成功后怎么接收或发送数据的?这就是本篇要讲解的内容。

    首先我们要先设计好客户端的界面布局。可以设计成如下图所示的样式,关于如何设计界面布局是前面讲过的内容,这里就不在重复。那么在这个界面包含的组件有:一个标签、两个输入框、一个编辑框及四个按钮。这些组件如何生成,如何布局在界面上请查阅前面的文章。关键的是connect、flush及save三个按钮功能是如何实现的是需要我们研究的,尤其是connect按钮。改按钮点击后会由对应的myconnect槽函数来响应。

    mywindow.h文件的内容如下:

 

    mywindow.cpp文件的内容如下:

    上文我们提到客户端与服务器端的一次网络通信首先是由客户端发起连接的,并且上文有提到这个客户端的连接是由connect按钮的点击及其槽函数实现的。代码中我们也看到了,在myconnect函数中实质性的就是做了tcpsocket -> connectToHost (ip,port.toInt()); 这样一件事。根据函数参数中给定的ip、端口进行主动连接。至此我们了解了客户端与服务器端的一次网络通信到底是怎么产生的了。

    当端口接收到数据时,QT会触发一个叫做readyRead的信号,该信号与myread槽函数进行了捆绑。也就是说当有数据来的时候myread函数会进行数据的接收及处理,该存放就存放该做处理做处理。我们要注意的用C语言实现网络编程时的读数据和QT实现的不同,C中的connect及读数据是一种阻塞型的,而QT中则是使用的信号与槽来解决。因为在QT中不允许使用阻塞因此也就不需要考虑多线程了。好了到这里我们的QT网络通信的介绍就告一段落了。下面展示一下在PC上测试客户端和服务器端程序情形的图片作为本专题的结束。

By:霜月孤鸟

2014.8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值