socket长连接-client

本文介绍了一种基于Python的长连接心跳机制实现方案,详细描述了如何通过socket通信发送心跳告警信息,并从CSV文件读取数据进行GBK编码转换及发送的过程。涉及的技术包括socket编程、CSV文件操作、编码转换等。

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import socket
import sys
import time,os
from getLog import FinalLogger
import csv
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')

'''
client端
长连接,心跳
'''
class dataProcess:
    def __init__(self):
        self.logger = FinalLogger.getLogger()
        self.host = "*"
        self.port = 5557
        self.sock = self.doConnect(self.host,self.port)

    def doConnect(self,host,port):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try :
            sock.connect((host,port))
        except :
            pass
        return sock

    def sendData(self):
        try:
            alarmData = self.alarmData()
            #print alarmData
            if alarmData:
               strData = alarmData
            else:
               strData = self.heartBeat() 
            self.sock.send(strData)
            print 'send ok'  
            print strData
            self.logger.info(strData)
            fileName = "/data/FBAndIPTVsocket/scriptFile/result.csv"
            os.system(">%s" % (fileName));
        except socket.error :
            print "socket error,do reconnect "
            self.sock = self.doConnect(self.host,self.port)
            time.sleep(3)
        except :
            print 'other error occur '
            time.sleep(3)

    def alarmData(self):
        fileName = "/data/FBAndIPTVsocket/scriptFile/result.csv"
        os.system("sed -i 's/\"//g' %s" % (fileName));
        strData=""
        f = codecs.open(fileName,'r','utf-8')
        s = f.readlines()
        f.close()
        for line in s:
            strData = strData + line.encode('GBK')
        return strData

    def heartBeat(self):
        strData1 = "<AlarmStart>"
        strData2 = "IntVersion:V1.0.0"
        strData3 = "MsgSerial:"
        strData4 = "AlarmUniqueId:" + '91'
        strData5 = "AlarmUniqueClearId:"
        strData6 = "NeName:"
        strData7 = "NeIp:"
        strData8 = "SystemName:"
        strData9 = "EquipmentClass:"
        strData10 = "Version:V1.0"
        strData11 = "LocateNeName:"
        strData12 = "LocateNeType:"
        strData13 = "LocateInfo:"
        strData14 = "EventTime:"
        strData15 = "CancelTime:"
        strData16 = "VendorSeverity:三级告警"
        strData17 = "VendorAlarmId:"
        strData18 = "AlarmTitle:" + '心跳告警'
        strData19 = "ProbableCauseTxt:"
        strData20 = "AlarmText:"
        strData21 = "AlarmStatus:1"
        strData22 = "Vendor:" + '中兴'
        strData23 = "maintain_group:"
        strData24 = "<AlarmEnd>"
        strDataU8 = "\r\n" + strData1 + "\r\n" + strData2 + "\r\n" + strData3 + "\r\n" + strData4 + "\r\n" + strData5 + "\r\n" + strData6 + "\r\n" + strData8 + "\r\n" + strData9 + "\r\n" + strData10 + "\r\n" + strData11 + "\r\n"+ strData12 + "\r\n" + strData13 + "\r\n" + strData14 + "\r\n" + strData15 + "\r\n" + strData16 + "\r\n" + strData17 + "\r\n" + strData18 + "\r\n" + strData19 + "\r\n" + strData20 + "\r\n" + strData21 + "\r\n" + strData22 + "\r\n" + strData23 + "\r\n" + strData24 + "\r\n"
        strData = strDataU8.encode('GBK')
        return strData

if __name__ == "__main__":
    while True:
        nDataProcess = dataProcess();
        nDataProcess.sendData();
        time.sleep(10)

### 使用 `socket.io-client` 在 Java 或 Android 中连接到 Netty-SocketIO 服务器 为了在 Java 或 Android 应用程序中使用 `socket.io-client` 连接到基于 Netty 的 Socket.IO 服务器,可以按照以下方式操作: #### 添加依赖项 首先,在项目中引入 `socket.io-client` 的 Maven 或 Gradle 依赖项。以下是 Gradle 配置的一个例子: ```gradle dependencies { implementation 'com.github.nkzawa:socket.io-client:0.6.0' } ``` 如果使用的是 Maven,则可以在项目的 `pom.xml` 文件中添加如下配置: ```xml <dependency> <groupId>com.github.nkzawa</groupId> <artifactId>socket.io-client</artifactId> <version>0.6.0</version> </dependency> ``` 此部分涉及的内容可以通过官方文档进一步验证[^1]。 #### 创建客户端并建立连接 创建一个简单的客户端来连接到指定的 URL 地址,并监听事件响应。下面是一个基本示例代码片段: ```java import io.socket.client.Socket; import io.socket.client.IO; public class Main { public static void main(String[] args) throws Exception { // 设置服务器地址 String url = "http://localhost:3000"; // 初始化Socket实例 IO.Options opts = new IO.Options(); opts.reconnection = true; // 启用自动重连功能 Socket socket = IO.socket(url, opts); // 建立连接 socket.on(Socket.EVENT_CONNECT, () -> { System.out.println("Connected to the server."); // 发送消息给服务器 socket.emit("message", "Hello from client!"); }); // 接收来自服务器的消息 socket.on("serverMessage", (data) -> { System.out.println("Received message from server: " + data); }); // 处理断开连接的情况 socket.on(Socket.EVENT_DISCONNECT, () -> { System.out.println("Disconnected from the server."); }); // 开始连接过程 socket.connect(); } } ``` 上述代码展示了如何通过设置选项参数以及绑定不同类型的回调函数完成整个流程。 #### 解决常见问题 当尝试集成时可能会遇到一些挑战,比如版本兼容性和跨域访问控制等问题。对于前者来说,确保所使用的库版本匹配是非常重要的;而对于后者则需确认服务端已正确设置了 CORS 政策允许外部请求进入[^2]。 另外值得注意的一点是,如果你正在运行 Node.js 环境下的 Socket.IO 并希望了解其具体版本号以便调试或者升级相关组件的话,可以直接利用命令行工具查询当前安装好的模块详情[^3]: ```bash npm list --depth=0 | grep socket.io ``` 最后提到有关于 PHP 框架 Laravel 和 Socket.IO 结合使用的场景下的一些技巧也可以作为参考资料之一[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值