📄 dsocket.cpp
字号:
////////////////////////////////////////////////////////////////////////////
// File description :
// Name : DSocket.cpp
// Details : Datagram Socket for communication
// *** Control Packet Format ***
// Type : 1 byte
// Length of hostname : 1 byte
// Hostname : <var>
//
// *** Text packet format ***
// Type : 1 byte
// Length of hostname : 1 byte
// Hostname : < var>
// Length of message : 2 byte
// Message : <var>
//
// *** Audio packet format ***
// Type : 1 byte
// Length of hostname : 1 byte
// Hostname : < var>
// size of audio data : 2 byte
// Audio data : <var>
//
// *** Video packet format ***
// Type : 1 byte
// Length of hostname : 1 byte
// Hostname : < var>
// size of video data : 2 byte
// Video data : <var>
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DSocket.h"
#include "AudioTestDlg.h"
#include "AudioTest.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
DSocket::DSocket()
{
m_dlen=0;
m_data = new char[80257];
Temp = new char[256];
if(!m_data) AfxMessageBox("DSocket::DSocket 分配缓冲失败");
else m_dlen=80257;
remoteaddress="192.168.0.211";
}
DSocket::~DSocket()
{
if(m_data) delete []m_data;
m_dlen=0;
}
BOOL DSocket::CreateSocket(int port,int dtype)
{
type=dtype;
localname="Currahee";
rmtport=port;
return Create(port,SOCK_DGRAM);
}
void DSocket::SetParent(CDialog *dlg)
{
pDlg=dlg;
}
void DSocket::OnReceive(int errcode)
{
CString address,tmp;
BOOL ret=TRUE;
// char hname[512],str[1024],mesg[512];
unsigned int port=0,retvalue=SOCKET_ERROR;
int n=0,len=0;
int ulen=0;
retvalue= ReceiveFrom(m_data,m_dlen,address,port);
if((retvalue==SOCKET_ERROR)||(m_data=="")||(!m_data))
{
return;
}
type=m_data[0];
if (type==TYPE_ENERGY)
{
rmtport=port;
if (( (CAudioTestDlg*) pDlg )->m_LocalJudge!=1) return;
int NameLength=m_data[1];
int UserinList=m_data[2]-'A';
double Energy;
CopyMemory(&Energy,m_data+m_data[1]+2,8);
for (int i=Prelude-1;i>0;i--)
( (CAudioTestDlg*) pDlg )->m_WeightValue[UserinList][i]=( (CAudioTestDlg*) pDlg )->m_WeightValue[UserinList][i-1];
( (CAudioTestDlg*) pDlg )->m_WeightValue[UserinList][0]=Energy;
( (CAudioTestDlg*) pDlg )->m_TotalValue[UserinList]=0;
for (i=Prelude-1;i>=0;i--)
( (CAudioTestDlg*) pDlg )->m_TotalValue[UserinList]+=( (CAudioTestDlg*) pDlg )->m_WeightValue[UserinList][i]*( (CAudioTestDlg*) pDlg )->m_Coefficient[i];
( (CAudioTestDlg*) pDlg )->CheckTop();
}
}
BOOL DSocket::SendControlMessage(int type,char *address)
{
unsigned int n;
BOOL ret;
m_data[0]=TYPE_CONTROL;
m_data[1]=type;
// Length of hostname
n=strlen(localname);
m_data[2]=n;
// Name of the sender host
memcpy(&m_data[3],localname,n);
/*
TRACE("DSocket::SendControlMessage ");
switch(type)
{
case MESG_CONNECT:
TRACE("MESG_CONNECT");
break;
case MESG_DISCONNECT:
TRACE("MESG_DISCONNECT");
break;
case MESG_ACCEPT:
TRACE("MESG_ACCEPT");
break;
case MESG_REJECT:
TRACE("MESG_REJECT");
break;
default:
TRACE("MESG_UNKNOWN");
break;
}
*/
// SendTo(data,n+2,PORT_CONTROL,address);
ret=SendTo(m_data,n+3,rmtport,address);
return (ret!=SOCKET_ERROR);
}
void DSocket::SendAudioData(unsigned char *data,int length)
{
// TRACE("DSocket::SendAudioData %d Bytes\n",length);
// SendTo(data,length,PORT_AUDIO,remoteaddress);
// if(strlen(remoteaddress)<=1)
// {
// CopyMemory(remoteaddress,((CAudioTestDlg *)pDlg)->dcontrol .remoteaddress,sizeof(remoteaddress));
// CopyMemory(remotename,((CAudioTestDlg *)pDlg)->dcontrol .remotename,sizeof(remotename));
// }
*(data-1)=TYPE_AUDIO;
SendTo(data-1,length+1,rmtport,remoteaddress);
}
void DSocket::SendVideoData(unsigned char *data,int length)
{
// SendTo(data,length,PORT_VIDEO,remoteaddress);
// if(strlen(remoteaddress)<=1)
// {
// CopyMemory(remoteaddress,((CGraghDialogDlg *)pDlg)->dcontrol .remoteaddress,sizeof(remoteaddress));
// CopyMemory(remotename,((CGraghDialogDlg *)pDlg)->dcontrol .remotename,sizeof(remotename));
// }
*(data-1)=TYPE_VIDEO;
SendTo(data-1,length+1,rmtport,remoteaddress);
// TRACE("DSocket::SendVideoData %s %d Bytes\n",remoteaddress,length);
}
void DSocket::SendEnergyData(double Energy)
{
// char* Temp=new char[256];
ZeroMemory(Temp, 256);
Temp[0]=TYPE_ENERGY;
Temp[1]=((CAudioTestDlg *)pDlg)->m_UserName.GetLength();
CopyMemory(Temp+2,((CAudioTestDlg *)pDlg)->m_UserName,((CAudioTestDlg *)pDlg)->m_UserName.GetLength());
CopyMemory(Temp+Temp[1]+2,&Energy,8);
Temp[Temp[1]+10]='\0';
SendTo(Temp,Temp[1]+10,rmtport,remoteaddress);
}
void DSocket::CloseSocket()
{
DSocket::Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -