⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cb_socket.cpp

📁 LINUX系统下基于ARM处理器的使用GPRS方式通过SOCKET数据包进行煤矿瓦斯监控的程序.这是在黑龙江省现场运行的程序源代码.
💻 CPP
字号:
/*
* Copyright (c) 2004,哈尔滨驰博电子公司
* All rights reserved.
* 
* 文件名称:CB_Socket.h
* 文件标识:
* 摘    要:连接、数据传输
* 
* 当前版本:1.1
* 作    者:Sam
* 完成日期:2004年10月14日
*
* 取代版本:1.0 
* 原作者  :Sam
* 完成日期:2004年08月10日
*/

#include <sys/timeb.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/io.h>
#include <unistd.h>

#include "CB_Socket.h"
#include "CB_Tools.h"
#include "Afx.h"


//##ModelId=40B2E55C0352
int CB_Socket::initiaze()
{
  bzero(&m_addr, sizeof(m_addr));
  m_addr.sin_family = AF_INET;
  m_addr.sin_port = htons(m_port);
  m_addr.sin_addr.s_addr = inet_addr(m_ip);
  getConnect();
}

//##ModelId=40B2E74803E5
int CB_Socket::getConnect()
{
 int i = 0;
 for ( ;; )
  {
     if (connect(m_connect, (struct sockaddr*)&m_addr, sizeof(m_addr)) <0)
     {
	   perror ("connect error");
	   printf ("try connect:%d\n",i);
	   //return -4;
     }
	 else
	 {
       i = 0;
	   break; 
	 }
  }

  return m_connect;
}

//##ModelId=40B2E800030E
int CB_Socket::sendData(char *data, char *rtn)
{
  int iOptVal;
  socklen_t iOptLen = sizeof(int);
  
  if( getsockopt(m_connect, SOL_SOCKET, SO_TYPE, &iOptVal, &iOptLen) <0)
  {
    // printf("%d\n",iOptVal);
	getConnect();
  }
  int iDataLen;
  int len;
  ;
  iDataLen = strlen(data);
  
  for (int i=0; i<2; i++)
  {
    printf("%d\n",m_connect);
    len = write(m_connect, data, iDataLen);
	/*
	printf("%d\n",len);
    if (len <0 )
	{
      close(m_connect); 
	  getConnect();  
	}
    else*/
    if (len != iDataLen)
	{
      return -1; 	  
    }
	else
	{
      break;
	}
  }

  if (rtn != NULL)
  {
    char *pszBuf = new char[80]; 
    memset(pszBuf, '\0', 80);
	pszBuf[80] = '\0';
    
	if (recv (getConnect(), pszBuf, 80, 0) == -1)
	{
      perror ("rev error.");
	  return -1;
	}

    strcpy (rtn, pszBuf);
    delete pszBuf;
  }

  return 0;
}

//##ModelId=40B2E8AF0201
int CB_Socket::send(char *data, char *rtn)
{
  if (sendData (data, rtn) == 0)
  {
    struct timeb tp;
    ftime (&tp);
   
    FILE *fProcess;
    char *fileName;
  
    fProcess = fopen ("/gasclient/dat/process.dest", "w+");
    if (fProcess == NULL)
    {
      cb_restart (true);
    }
    else
    {
      char buf[20];
      memset (buf, '\0', 20);
      buf[20] = '\0';
      sprintf (buf, "%d", tp.time);
      fwrite (&buf, 20, 1, fProcess);
      fclose (fProcess);  
    }
    return 0; 
  } 

  return -1;
}

//##ModelId=40B2F4DF0077
CB_Socket::~CB_Socket()
{
  //shutdown(m_connect,2);
  //close(m_connect);
}

//##ModelId=40D298900066
int CB_Socket::m_port;

//##ModelId=40D298CD01E0
char *CB_Socket::m_ip;

//##ModelId=4101BA87033C
time_t CB_Socket::m_time_out = 0;

time_t CB_Socket::m_timeStamp = 0;


//##ModelId=416E0D95034B
int CB_Socket::m_connect_count = 3;

int CB_Socket::m_connect;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -