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

📄 mysocket.cpp

📁 用vc编写的视频采集端口编成
💻 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 + -