socketclass.h~
来自「电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下」· H~ 代码 · 共 161 行
H~
161 行
#ifndef SOCKETCLASS_H#define SOCKETCLASS_H#include <qsocket.h>#include <qserversocket.h>#include <qobject.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <termios.h>#include <errno.h>#include <string.h>#include <ctype.h>#include <netdb.h>#include <error.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/time.h>#include <sys/select.h>#define MSG_OOB_COUNT 10 typedef enum enuCHECKTYPE{ N = 0, O = 1, E = 2}paritytype_t;typedef enum tagCOMMUNICATIONTYPE{ NIL = 4, NET = 3, NETCLIENT = 1, NETSERVER = 2, COM = 0}communication_t;extern void error_log(char* message);class CComdev : public QObject{ Q_OBJECT public: CComdev(); CComdev(int comPort, speed_t initSpeed, int databit, int stopbit, paritytype_t parityType, unsigned int delay); ~CComdev(); ssize_t ReadData(int comfd, void *buffer, size_t num); ssize_t ReadData(void *buffer, size_t num); ssize_t WriteData(int comfd, void *buffer, size_t num); ssize_t WriteData(void *buffer, size_t num); int OpenCom(int comPort, speed_t initSpeed, int dataBit, int stopBit, paritytype_t parityType, unsigned int delay); int OpenCom(char *com_filename, speed_t initSpeed, int dataBit, int stopBit, paritytype_t parityType, unsigned int delay); bool Open(int comPort, speed_t initSpeed, int dataBit, int stopBit, paritytype_t parityType, unsigned int delay); bool Open(char *com_filename, speed_t initSpeed, int dataBit, int stopBit, paritytype_t parityType, unsigned int delay); bool SetRaw(int comfd, bool isRaw); bool SetRaw(bool isRaw); bool SetTime(int comfd, unsigned int delay); bool SetTime(unsigned int delay); bool SetMin(int comfd, unsigned int min); bool SetMin(unsigned int min); bool SetSpeed(int comfd, speed_t speed); bool SetSpeed(speed_t speed); bool SetDatabit(int comfd, int dataBit); bool SetDatabit(int dataBit); bool SetStopbit(int comfd, int stopBit); bool SetStopbit(int stopBit); bool SetParity(int comfd, paritytype_t type); bool SetParity(paritytype_t type); bool SetOption(int comfd, struct termios *p_option); bool SetOption(struct termios *p_option); bool GetOption(int comfd, struct termios *p_option); bool GetOption(struct termios *p_option); bool CloseCom(int& comfd); bool CloseCom(); public: int com_fd; FILE* fp ; termios save_term ; signals: void errors_signal(char*); void connected_signal(void*); void connectclose_signal(void*);};class CSocket : public QSocket{ Q_OBJECT public: CSocket ( QObject * parent = 0, const char * name = 0 ); ~CSocket(); public: int GetSocketState(); //得到当前Socket状态 QString GetLocalAddress(); //得到本地IP地址 QString GetHostAddress(); //得到对方的IP地址 int GetLocalPort(); //得到本地端口号 int GetHostPort(); //得到对方的连接端口号 long ReadBlock(char* data,long maxlen); //读网络缓冲数据 long WriteBlock(const char* data,long maxlen); //向网络缓冲写数据 int readable_timeo(int fd,int sec); //数据是否可读 void setEnableOOB(int usec=1000,bool bEnable=true); //设置紧急数据,测试链路状态 signals: void errors_signal(char*); void connected_signal(void*); void connectclose_signal(void*); void newconnected_signal(int socket); private slots: void socketConnected_slot(); //处理QSocket之connected()信号 void socketConnectionClosed_slot(); //处理QSocket之connectionClosed()信号 void socketError_slot(int); //处理QSocket之error(int)信号 private: int m_OobCount; //测试过程变量 int m_TimerID; //定时器ID protected: void timerEvent( QTimerEvent * ); //定时器消息事件};class CServerSocket : public QServerSocket{ Q_OBJECT public: CServerSocket(Q_UINT16 port, int backlog = 1, QObject * parent = 0, const char * name = 0 ); CServerSocket(const QHostAddress & address, Q_UINT16 port, int backlog = 1, QObject * parent = 0, const char * name = 0 ); CServerSocket(QObject * parent = 0, const char * name = 0 ); ~CServerSocket(); public: void newConnection(int socket); //当监听到新的连接时 public: QString GetAddress(); //返回监听地址 int GetPort(); int GetSocket(); bool isListenOk(); //判断监听是否可用? bool GetClientAddress(int socket,QString &cliAddress,int &port); //得到客户端地址 signals: void errors_signal(char*); void connected_signal(void*); void newconnected_signal(int); void connectclose_signal(void*); private slots: void clientConnectionClosed_slot(CSocket*); void clientError_slot(CSocket*,int);};#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?