养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

如何使用socket 实现一个断开重连功能的客户端

时间:2024-10-28 09:19:45

个人工作中开发可靠性较高的上位机程序,下位机有PLC和扫描枪以及多种网络连接设备,开发擢爻充种的基本要求是要实现断梯瓣氨割开重连,以应对使用过程中的设备连接异常。比如使用到的一种基于以太网连接的扫码枪,通信采用标准的TCP通信协议,使用原始socket不需要写很多代码就可实现此断开重连的功能,本文将此工作经验奉献给有需要的读者朋友们,希望能够帮到您。

工具/原料

socket编程基础知识

win32线程的基础知识,VC++开发知识

方法/步骤

1、设计总纲:创建一个线程用于循环之倔匦茔读写socket,如果读写错误或无法建立连接,继续下一个循环。伪代码为:CSimpleSocket*client;bo泠贾高框olsuccess=false;while(1){Sleep(1000);if(!success){success=client->connect();if(!success)deletesuccess;}else{success=client->readSometh();if(!success)deleteclient;}}

2、先设计一个简单的socket类,我这里命名为CS坡纠课柩impleSocket,此类的成员函数有创建连接和读写数据,分别牾肟甘道为connect和GetSN(CString&sn)。两个成员函数返回值都是bool值,在出错时返回false。注意在创建连接时要设置连接属性,设置超时连接,不然recv函数会阻塞,导致GetSN函数挂起。设置连接属性的函数为setsocktopt。

如何使用socket 实现一个断开重连功能的客户端

3、创建一个线程,用于循环读写socket,在此socket出现读写错误或者断开连接时,重新调用connect成员函数进行连接。我使用的是MFC开发,所以这个线程从CWinThread派生,重载InitInstance函数,实现具体的循环读写功能即可。

如何使用socket 实现一个断开重连功能的客户端

4、这个线程函数的原型很简单,具体功能都在InitInstance中实现。

如何使用socket 实现一个断开重连功能的客户端

5、在程序初始化时创建线程,开始工作。CScanThread*pScanThread=newCScanThread(this);pScanThread->CreateThread();

6、验证:从网上找一个Socket服务端程序,配好监听端口,开启服务,可以验证此程序的功能是否ok。本人开发的上位机程序验证是没有问题的。

如何使用socket 实现一个断开重连功能的客户端

© 一点知识