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

📄 socket.cpp

📁 使用C开发的嵌入式平台软件源程序.有串行通讯、数据库入库等功能。
💻 CPP
字号:

#include <afxwin.h>  
#include <Winbase.h>
#include <Winsock2.h> 
#include "stdafx.h"
#include "前置机.h"
#include "PropPage1.h"

//int Socket_Total = 300; //套接口连接计数。五分钟之内不进行套接口连接。

void CPropPage1::OnSocketSend(){//套接口发送数据按钮程序.
 	 Socket_Total = Socket_Total - 1;
	 if (Socket_Total > 0) return; //计数器大于零时,不进行套接口连接。
     WSADATA wsaData; DWORD dwip;
	 if (WSAStartup(MAKEWORD(1,1),&wsaData)) {WSACleanup();return;}//调用Windows Sockets DLL
	 ServerSocket=socket(AF_INET,SOCK_STREAM,0);    //创建服务器端Socket,类型为SOCK_STREAM,面向连接的通信
     if(ServerSocket == INVALID_SOCKET) return;
     CWinApp* pApp = AfxGetApp();

     CRecordPassWord recordPassWord; CString IP1;
  	 bool bResult = g_DB.SeekPassWordDB(CEDB_SEEK_BEGINNING, 0);
	 for(int nCount = 0; nCount <= 100; nCount++){
	    if(bResult) bResult = g_DB.ReadPassWordRecord(recordPassWord);
	    if(bResult){//记录存在。	
        if (recordPassWord.m_strName == _T("IP")) IP1 = recordPassWord.m_strData;
		}
		bResult = g_DB.SeekPassWordDB(CEDB_SEEK_CURRENT, 1);
	 }
     CRecordSend record;
	 char *IP2 = new char[20];
	 ZeroMemory(IP2, sizeof(char[20]));//给变量buff分配内存空间.
	 char *buf = new char[100];
	 ZeroMemory(buf, sizeof(char[100]));//给变量buff分配内存空间.
	 WideCharToMultiByte(CP_ACP,0,IP1,-1,IP2,20,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
	 if((dwip=inet_addr(IP2))==INADDR_NONE) {closesocket(ServerSocket); delete IP2; delete buf; return;} //IP地址存贮在变量ip中.
     sockStruct.sin_family=AF_INET; //使用TCP/IP协议
     sockStruct.sin_port = htons(8001);
	 sockStruct.sin_addr.S_un.S_addr = dwip;//使用了IP地址.
	 if(connect(ServerSocket,(LPSOCKADDR)&sockStruct,sizeof(sockStruct)) == SOCKET_ERROR) {
		     Socket_Total = 300; // 五分钟之内不再进行套接口连接。
			 closesocket(ServerSocket); //关闭客户端的ServerSocket
	         delete IP2; //释放变量buff的内存空间.
	         delete buf; //释放变量buff的内存空间.
	         return;} //使用IP地址与服务器连接.
  	 bResult = g_DB.SeekSendDB(CEDB_SEEK_BEGINNING, 0);
	 if(bResult){//记录存在。	
	    for (int i=0;i<100;i++) buf[i] = 32;//在每条记录读数之前,对缓冲区清空.
    	bResult = g_DB.ReadSendRecord(record);
		CString strAddress1 = record.m_strAddress; //以字符串的方式读取字符串.
		for (i=0;i<5;i++) {if(strAddress1[i] == 0) break; buf[i] = (char)strAddress1[i];}
        CString strName1 = record.m_strName; char strName2[20];
		WideCharToMultiByte(CP_ACP,0,strName1,-1,strName2,20,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
		for (i=0;i<20;i++) {if(strName2[i] == 0) break; buf[i+5] = (char)strName2[i];}
        CString DateTime1 = record.m_DateTime; //以字符串的方式读取字符串.
		for (i=0;i<20;i++) {if(DateTime1[i] == 0) break; buf[i+25] = (char)DateTime1[i];}
        CString strType1 = record.m_strType; //以字符串的方式读取字符串.
		WideCharToMultiByte(CP_ACP,0,strType1,-1,strName2,20,NULL,NULL);//实现UNICODE字符到ANSI字符的转换.
		for (i=0;i<10;i++) {if(strName2[i] == 0) break; buf[i+45] = (char)strName2[i];}
        CString strData1 = record.m_strData; //以字符串的方式读取字符串.
		for (i=0;i<10;i++) {if(strData1[i] == 0) break; buf[i+55] = (char)strData1[i];}
	    send(ServerSocket,buf,70,0); //套接口发送七十个字节的数据。	
	    g_DB.DeleteSendRecord(0);			
		}
      closesocket(ServerSocket); //关闭客户端的ServerSocket
	  delete IP2; //释放变量buff的内存空间.
	  delete buf; //释放变量buff的内存空间.
	  Socket_Total = 0; 
}

⌨️ 快捷键说明

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