Qt客户端套接字QTcpSocket通过bind指定本地ip

背景:

我做一个上位机软件,需要同时控制几个下位机,使用套接字方式通讯。但制作阶段我不希望总上机调试,而是在本机模拟通信过程。

本机网卡可以指定多个ip地址,我希望客户端(模拟下位机)连接服务端(模拟上位机)时,能够指定ip和端口。这样在连接时,才能识别是哪个下位机。而下位机不可能设计为在连接后先发个包确认身份。至少目前我不希望下位机做修改,而是我在上位机端自己搞定。

按照帮助说明使用QTcpSocket类的bind函数可以绑定ip和端口,也就是指定。但事实上一旦精确到端口,会各种不爽。

不需要识别客户端身份时,不用管它,客户端会根据自己所在的主机ip,自动选择随机端口。这时候随便连接断开很灵活,不收任何影响。

一旦绑定了ip和端口,是不可以频繁断开重连的。网上各种方法,无非是监听套接字不要自己直接用QTcpServer,要通过API调用。或者端口复用。

事实上对于我都不太适用。适用Qt就是为了跨平台,不想尝试跟OS有关的特定API。而端口复用对于qt其实并不太灵活,还是要等OS的响应。

解决方法:

仅限于我的需求,能识别客户端身份就好。

很简单,使用bind绑定的时候,只绑定ip就行了,端口就让它随机。本机网卡可以多几个ip,每个客户端指定一个ip,不管端口。比较高效。

注意:

qt比较坑的一些set函数,比如setPeerName,setLocalAddress等,首先是protect类型,还要写个子类间接调用才行。即使能调用也是然并卵,这些函数的作用仅仅是为了设定一些函数的返回值,在实际应用中意义不大。或者说对我的需求意义不大。

往往这些set函数会达到误导人的效果,不是set以后就一定能get。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一种跨平台的应用程序开发框架,也可用于客户端和服务端的连接。为了实现客户端与服务器连接,需要先确定通信协议和通信方式。 常见的通信协议有TCP和UDP,TCP协议是一种面向连接的、可靠的数据传输协议,在数据传输过程中保证数据的完整性和可靠性,而UDP协议则是无连接的,无法保证数据传输的可靠性,但因为它的连接速度比TCP快,因此在某些场景下更为适用。 通信方式可以采用同步或异步方式,同步方式会阻塞用户界面,异步方式则可以使应用程序保持响应,提高用户体验。 对于基于TCP协议的应用程序,采用Qt提供的QTcpSocket实现客户端与服务器的连接。在客户端中,通过调用QTcpSocket类的connectToHost()函数连接服务器,连接成功后即可进行通信。在服务端中,通过Qt提供的QTcpServer类创建监听套接字,并监听客户端的连接请求。一旦有客户端连接成功,QTcpServer将会发出newConnection()信号,我们可以利用这个信号回调函数与该客户端通信。 对于基于UDP协议的应用程序,采用Qt提供的QUdpSocket实现客户端与服务器的连接。在客户端中,通过QUdpSocket类的bind()函数绑定本地端口,并通过writeDatagram()函数发送数据包到指定的服务器端口。在服务器端,通过bind()函数绑定指定的端口,并通过readyRead()信号处理来自客户端发送的数据包。 在进行客户端与服务器的通信时,还需要注意安全问题。对于一些敏感信息的传输,可以采用加密或者其他安全措施确保信息的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值