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