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

📄 socketsend.h

📁 一个网络监视的程序
💻 H
字号:
// SocketSend.h: interface for the SocketSend class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SOCKETSEND_H__E52BDD6A_F8CE_4BF3_B108_0CF029319EEA__INCLUDED_)
#define AFX_SOCKETSEND_H__E52BDD6A_F8CE_4BF3_B108_0CF029319EEA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "global.h"

#define BUFF_SIZE 10*1024  //use in socket function send data 
#define MaxConnectTimes 1



extern probebuff gProbeBuff1;
extern probebuff gProbeBuff2;
extern CRITICAL_SECTION gCriticalSectionForBuff;
extern CRITICAL_SECTION gCriticalSectionForPrtBuff;
extern struct probebuff * PtrBuffWrite;


class SocketSend  
{
public:
	SocketSend();
	DWORD StartSock();
	DWORD CreateSocket();	
	BOOL CallServer(char serverIp[20],int CallPort);	
	int SendBuff(std::string CpuInfo);
	virtual ~SocketSend();
	SOCKET sock;
	sockaddr_in ServerAddr;
	CRITICAL_SECTION CriticalSectionSock;
	CRITICAL_SECTION CriticalSectionBuff;
	struct  probebuff * Buffer;
    char storeCpuInfo[18];
private:
//*******************************************************************************
//函 数 名:SendSendPacket
//功    能:线程同步发送
//输入参数:无
//输出参数:无
//编写日期:2004.07.20
//修改日期:
//作    者:linshifei
//其他说明:

	static DWORD WINAPI SendPacket(LPVOID lParam){

		static struct senddata
		{
			char buff[BUFF_SIZE];
			int len;
		} data;
		static bool  flag=true;
		
		SocketSend* obj = (SocketSend*)lParam;
		
		if (flag) {
			EnterCriticalSection(&gCriticalSectionForPrtBuff);
			PtrBuffWrite=&gProbeBuff2;
			LeaveCriticalSection(&gCriticalSectionForPrtBuff);
			flag=false;
			
		}
		else{
			EnterCriticalSection(&gCriticalSectionForPrtBuff);
			PtrBuffWrite=&gProbeBuff1;
			LeaveCriticalSection(&gCriticalSectionForPrtBuff);
			flag=true;
		}
		
		
		EnterCriticalSection(&(obj->CriticalSectionSock));
		
		
		if (flag) {
			if((strcmp(obj->storeCpuInfo,"buff_full"))){
			gProbeBuff2.str+=(obj->storeCpuInfo);
			gProbeBuff2.len+=sizeof(obj->storeCpuInfo);
			}
			obj->Buffer=&gProbeBuff2;
		}
		else{
			if((strcmp(obj->storeCpuInfo,"buff_full"))){
			gProbeBuff1.str+=obj->storeCpuInfo;
			gProbeBuff1.len+=sizeof(obj->storeCpuInfo);
			}
			obj->Buffer=&gProbeBuff1;
		}

			/* unable : obj->Buffer->len > BUFF_SIZE
			if(obj->Buffer->len > BUFF_SIZE)
			{
				strcpy(data.buff, (obj->Buffer->str.substr(0, BUFF_SIZE)).c_str());
				//		AfxMessageBox("%s\n", data.buff);//测试
				data.len = BUFF_SIZE;
				obj->Buffer->str = obj->Buffer->str.substr(BUFF_SIZE,obj-> Buffer->len - BUFF_SIZE);
				//		AfxMessageBox("%s\n", Buffer.str.c_str());//测试
				obj->Buffer->len = obj->Buffer->len - BUFF_SIZE;
				int len=send(obj->sock, (char *)&data, sizeof(senddata), 0);
				if (len>0){
					CString tempstr;
					tempstr.Format("%s",data.buff);
					AfxMessageBox(tempstr);
			}
			*/
				CString tempstr;
				strcpy(data.buff, obj->Buffer->str.c_str());
				data.len = obj->Buffer->len;
				obj->Buffer->str.erase();
				obj->Buffer->len = 0;
				int len=send(obj->sock, (char *)&data, sizeof(senddata), 0);
	/*			if (len>0){
					tempstr.Format("%s-len:%d",data.buff,data.len);
					AfxMessageBox(tempstr);
				}
	*/	
		if(len<=0)
				{
				long ErrorCode=WSAGetLastError();
					switch(ErrorCode)
					{
					case 10054:
						AfxMessageBox("连接被对方重设!必须重新连接!应用程序必须重新启动!\n\n");
						exit(0);							
						break;
					case 10093:
						AfxMessageBox("使用的Winsock尚未初始化!应用程序必须重新启动!\n\n");
						exit(0);
						break;
					default:
						AfxMessageBox("Socket 发送失败,出现未知错误!应用程序必须重新启动!\n\n");
						exit(0);							
					}
			//		closesocket(sock); //如果发送过程中发生错误,则关闭socket
					WSACleanup();
					
					return 0;
					
		}

		LeaveCriticalSection(&(obj->CriticalSectionSock));
		
		return 1;
	}
	

};
#endif // !defined(AFX_SOCKETSEND_H__E52BDD6A_F8CE_4BF3_B108_0CF029319EEA__INCLUDED_)





















⌨️ 快捷键说明

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