📄 socket.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 + -