📄 mysocket.cpp
字号:
// MySocket.cpp: implementation of the CMySocket class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MySocket.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMySocket::CMySocket()
{
HKEY hKey;
if(RegOpenKeyEx(HKEY_CURRENT_USER, "software\\doggle\\AirGuard", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
MessageBox(NULL, "Calling RegOpenKeyEx error", "error", MB_OK | MB_ICONERROR);
char lpstrValue[100], lpszMessage[100], lpValueName[100];
DWORD cbData = 100, dwType;
unsigned long dwRtValue;
cbData = 100;
dwRtValue = RegQueryValueEx(hKey, "UdpPortForVideo", NULL, &dwType, (LPBYTE)lpstrValue, &cbData);
if (dwRtValue != ERROR_SUCCESS){
sprintf(lpszMessage, "找不到指定文件, 请与供应商联系");
MessageBox(NULL, lpszMessage, "error", MB_OK | MB_ICONERROR);
iUdpPortForVideo = 6000; // default value
}
else
iUdpPortForVideo = (int)(*((DWORD*)lpstrValue));
RegCloseKey(hKey);
bIsOnLine = 0;
bReadyForTransmit = 1;
iPointer = 0;
sprintf(lpszAckMessage, "A");
}
bool CMySocket::ConnectToServer(HWND hwndSocketMsgHandler, char* lpszDstIPAdr, int iTcpPort, int iUdpPort, int iAvPort)
{
WSADATA wsaData;
//LPHOSTENT lpHostEnt;
int nConnect;
DWORD wIPAddr;
if(WSAStartup(0x0101, &wsaData)){
MessageBox(NULL, "Could not load Windows Sockets DLL.",
"Message", MB_OK);
}
nSocket = socket(PF_INET, SOCK_STREAM, 0);
if (nSocket == INVALID_SOCKET)
MessageBox(NULL, "Calling Socket error", "message", MB_OK);
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(iTcpPort); //(88);
wIPAddr = inet_addr(lpszDstIPAdr); //"192.168.168.232");
sockAddr.sin_addr.S_un.S_addr = wIPAddr;
nConnect = connect(nSocket, (LPSOCKADDR)&sockAddr, sizeof(sockAddr));
if(nConnect){
MessageBox(NULL, "Error connecting socket!!", "ERROR", MB_OK);
return 0;
}
int iErrorCode = WSAAsyncSelect(nSocket, hwndSocketMsgHandler,
WM_CLIENT_ACCEPT, FD_READ
);
if(iErrorCode == SOCKET_ERROR){
MessageBox(NULL, "Calling WSAAsyncSelect() error",
"error", MB_OK);
return 0;
}
char lpstrCommand[100];
sprintf(lpstrCommand, "Sa-%d-%d", iUdpPort, iAvPort);// request sending.
TransmitCommand(lpstrCommand, strlen(lpstrCommand));
// Sleep(5000);
return 1;
}
bool CMySocket::TransmitCommand(char* pBits, int iLength)
{
int iErrorCode;
bReadyForTransmit = 0;
iErrorCode = send(nSocket, (char*)pBits, iLength, 0);
if(iErrorCode == SOCKET_ERROR){
MessageBox(NULL, "error occur on calling send()", "error", MB_OK | MB_ICONSTOP);
return 0;
}
return 1;
}
bool CMySocket::ClientAccept(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
int iErrorCode;
int nLength = sizeof(SOCKADDR);
HDC hDC;
LPSTR lpszAck = "A";
if(WSAGETSELECTERROR(lParam)){
MessageBox(NULL, "Error occur in selecting", "error", MB_OK | MB_ICONSTOP);
return 0;
}
if(WSAGETSELECTEVENT(lParam) == FD_READ){
//CheckAck();
//if (NetClient.ReceiveData(DvcIdpBmp.iFileSize) == 1){
// DvcIdpBmp.LoadDIBFromMemory(NetClient.GetImage());
// hDC = GetDC(g_hwndVideo);
// DvcIdpBmp.ShowDIB(hDC, 0, 0);
// ReleaseDC(hWnd, hDC);
// NetClient.TransmitData(lpszAck, strlen(lpszAck));
//}
return 1;
}
return 1;
}
bool CMySocket::CheckAck()
{
int nCharRecv;
char lpszReceiveBuffer[100];
nCharRecv = recv(nSocket, lpszReceiveBuffer, 1000, 0);
if (nCharRecv == SOCKET_ERROR){
MessageBox(NULL, "Error Occur during recv()!", "MESSAGE", MB_OK);
int nErrorCode = WSAGetLastError();
return 0;
}
bReadyForTransmit = 1;
return 1;
}
bool CMySocket::GetIPAdress(int nCamID, char* lpszIPAdressParam)
{
strcpy(lpszIPAdressParam, lpszIPAdress[nCamID]);
return 1;
}
bool CMySocket::SetIPAdress(int nCamID, char* lpszIPAdressParam)
{
HKEY hKey;
char lpszKey[30];
if (strlen(lpszIPAdressParam) < 20){
strcpy(lpszIPAdress[nCamID], lpszIPAdressParam);
if(RegOpenKeyEx(HKEY_CURRENT_USER, "software\\doggle", 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
MessageBox(NULL, "Calling RegOpenKeyEx error", "error", MB_OK | MB_ICONERROR);
sprintf(lpszKey, "IPAdress%d", nCamID);
RegSetValueEx(hKey, lpszKey, NULL, REG_SZ, (BYTE*)lpszIPAdress[nCamID], strlen(lpszIPAdress[nCamID]));
RegCloseKey(hKey);
return 1;
}
return 0;
}
bool CMySocket::CloseCurrentSocket()
{
//char lpstrCommand[100];
//sprintf(lpstrCommand, "Sz"); //request to stop sending.
//TransmitCommand(lpstrCommand, strlen(lpstrCommand));
closesocket(nSocket);
return 1;
}
CMySocket::~CMySocket()
{
CloseCurrentSocket();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -