switch (receive)
{
case 'a':
for(j=0;j<=47;j++)
{
//datasendt[2*j]=0x55;//************
//datasendt[2*j+1]=' ';//*************
datasend[j]=m_cl.Amp_TData[0x0D][j]; }
for(n=0;n<=47;n++) ///用空格隔开
{
datasendt[2*n]=datasend[n];
datasendt[2*n+1]=' ';
}
ret=send(s,datasendt,sizeof(datasendt),0); 发给客户端
if(ret==0||ret==SOCKET_ERROR)
{
TRACE(_T("send data error:%d\n"),WSAGetLastError());
AfxMessageBox(_T("datasendt error!"));
//closesocket(m_hSocket);
//return;
continue;
}
break;
}奇怪的地方就是如果我发给客户端的是上面注释有//***********的那两句中的数租,就是法一个48个字节的数组,里面全是写定的55,对方就能够准确的收到,但是如果换作m_cl.Amp_TData[0x0D][j]; 这个数组,对方怎么都收不对,48个字节总是缺几个,一般缺最后三个,还有就是对方是VB的程序,中间进行了UNICODE码的转换,而且收的同时去掉了空格
{
case 'a':
for(j=0;j<=47;j++)
{
//datasendt[2*j]=0x55;//************
//datasendt[2*j+1]=' ';//*************
datasend[j]=m_cl.Amp_TData[0x0D][j]; }
for(n=0;n<=47;n++) ///用空格隔开
{
datasendt[2*n]=datasend[n];
datasendt[2*n+1]=' ';
}
ret=send(s,datasendt,sizeof(datasendt),0); 发给客户端
if(ret==0||ret==SOCKET_ERROR)
{
TRACE(_T("send data error:%d\n"),WSAGetLastError());
AfxMessageBox(_T("datasendt error!"));
//closesocket(m_hSocket);
//return;
continue;
}
break;
}奇怪的地方就是如果我发给客户端的是上面注释有//***********的那两句中的数租,就是法一个48个字节的数组,里面全是写定的55,对方就能够准确的收到,但是如果换作m_cl.Amp_TData[0x0D][j]; 这个数组,对方怎么都收不对,48个字节总是缺几个,一般缺最后三个,还有就是对方是VB的程序,中间进行了UNICODE码的转换,而且收的同时去掉了空格
解决方案 »
- 预编译头文件可以优化程序的性能吗?
- RichEdit 选中文字的问题!
- GetWindowRect(&m_wndRect)问题
- 无法定位程序输入点Unregis 与动态库USER32.dll
- CByteArray 使用时小经验分享
- 急求帮助:DBGRID用法
- ?????汇编高手!!!!关于书的问题。。。。。。Intel微处理器全系列:结构、编程与接口(第五版)怎么样?????
- 为什么在WIN 98下,PS/2键盘的多功能键能钩到,USB键盘不可以??
- 小Kiss!有谁帮我解决一下小问题啊! 非常谢谢! (:)
- 请高手指点:那里可以找到wsock32.dll的源代码,如果那位有发请给小弟,不胜感激
- OnLButtonDown和OnLButtonDblClk
- 关于CTabCtrl 多行显示时调整子对话框的问题
====================================================================我不知道你这两个是什么类型的,但请看看是否是类型问题,造成数据被截断
char buff[1];
char receive;
char datasend[1440]; //发给上位机的功放数据帧
char datasendt[2880];
int n;
BYTE Amp_TData[17][48];
BYTE j;
int i;//////////////////////////////数据类型如上/////////////////////////////
char s1[2];
for(j=0;j<=47;j++)
{
//datasendt[2*j]=0x55;//************
//datasendt[2*j+1]=' ';//*************
sprintf(s1,"%02X", m_cl.Amp_TData[0x00][j]);
datasend[2*j]=s1[0]; datasend[2*j+1]=s1[1];
}不过今天还有个类似问题,就是
CString str;
SYSTEMTIME *curDateTime=new SYSTEMTIME;
GetLocalTime(curDateTime);
DWORD year = curDateTime->wYear;
DWORD month = curDateTime->wMonth;
DWORD day = curDateTime->wDay;
DWORD hour = curDateTime->wHour;
DWORD minute = curDateTime->wMinute;
DWORD second = curDateTime->wSecond;
delete curDateTime; DWORD d=year;
char str1[4];
memcpy(str1,(char*)&d,4);
DWORD a=0;
memcpy((char*)&a,str1,4); datasend[0]=str1[0];
datasend[1]=str1[1];
datasend[2]=char(month);
datasend[3]=char(day);
datasend[4]=char(hour);
datasend[5]=char(minute);
datasend[6]=char(second);
datasend[7]=timeobuff[0];
datasend[8]=timeobuff[1];
datasend[9]=timeobuff[2];
datasend[10]=timeobuff[3];
datasend[11]=timeobuff[4];
datasend[12]=timeobuff[5];
for(i=0;i<=12;i++) //用空格隔开
{
datasendt[2*i]=datasend[i];
datasendt[2*i+1]=' ';
}
ret=send(s,datasendt,sizeof(datasendt),0);
这样对方收到也不对,为什么呀,我都已经把他们写成char型的了请大家再支个招,多谢!好着急啊。!
DWORD d;
char str1[4];
memcpy(str1,(char*)&d,4);
-------------------------------------------------------------
我知道你想把整型变成char *型,但这样做..........................DWORD ==ULONG;
所以你就用 itoa()来转换成char *