MFC socket 发送数据
直接发送
BYTE datatest[8]={0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01};
send(m_ClientSocket[0],(LPCSTR)datatest,8,0);
可以发送出去,但想加入十六进制转换就出现问题了,大家能帮看看问题出在哪吗?现在是发送不出去数据,接收不到
void CtestDlg::OnBnClickedBtnsend()
{
// TODO: 在此添加控件通知处理程序代码
CString str,sTemp;
CByteArray hexdata;
DWORD dwBytesWritten=1024;
GetDlgItem(IDC_EDITsend)-> GetWindowText(strOut);
if (m_stats==1)
{
if(m_CHECKsend)
{
int i,n;
CString strTemp,str;
dwBytesWritten = ConvertHexC2String(strOut,hexdata);
n = hexdata.GetSize();
for(i=0;i<n;i++)
{
str.Format("%c", hexdata[i]);
strTemp += str;
}
strOut = strTemp;
send(m_ClientSocket[0],(LPCSTR)strOut,sizeof(strOut),0);
}
else
GetDlgItem(IDC_EDITsend)-> GetWindowText(str);
sTemp = DisplayHex2CString(str);
SetDlgItemText(IDC_EDITsend,strOut);
}
send(m_ClientSocket[0],(LPCSTR)strOut,sizeof(strOut),0);
}
CString DisplayHex2CString(CString Data)
{
CString sResult;
CString sTemp;
int Data_Length;
Data_Length = Data.GetLength();
if (Data_Length == 0) return "";
char *pchar = new char[Data_Length];
//用了new分配内存空间,要记得释放
strncpy(pchar,Data,Data_Length);
for(int i=0; i<Data_Length; i++)
{
sTemp.Format("%02X",pchar[i]);
sResult = sResult + sTemp;
}
delete pchar; //释放内存空间
return sResult;
}
int ConvertHexC2String(CString str, CByteArray &senddata)
{
//先判断输入字符串是否2个字符一组
int str_Length,iLength;
int hexdata, l_data;
char hstr,lstr;
char cTemp;
str_Length = str.GetLength();
iLength = 0;
senddata.SetSize(str_Length/2); //预先设置数组长度,不设置时,允许有错
char *ppchar = new char[str_Length];
strncpy(ppchar,str,str_Length);
for(int i=0; i<str_Length; )
{
cTemp = ppchar[i];
if(cTemp == ' ')
{
//iLength--;
i++;
continue; //如检测到空格则跳过,继续下一次循环
}
else
{
hstr = ppchar[i]; //取出字符作为16进制高位
i++;
lstr = ppchar[i]; //取出下一个字符作为16进制低位
if(lstr == ' ') //若取出的低位为空格,则不符合16进制2个一组的格式,终止循环
{
AfxMessageBox("请按照16进制每2个字符一组的方式输入",MB_ICONERROR);
break;
}
else
{
hexdata = ConvertHexChar(hstr); //高位转换为相应的0进制
l_data = ConvertHexChar(lstr); //低位转换为相应的10进制
if( (hexdata == -1) || (l_data == -1) )
{
AfxMessageBox("请按照16进制字符要求输入",MB_ICONERROR);
break;
}
else
hexdata = hexdata*16 + l_data; //安装16进制方式高位低位合并
senddata[iLength] = (char)hexdata; //int整型数转换为char字符型,并存入数组senddata[]
i++; //进入下一次循环
iLength++; //成功转换一组(2个)字符,记录长度加1
}
}
}
senddata.SetSize(iLength);
delete ppchar;
return iLength;
}