?? 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 + -