我在一个界面下得到一个CEdit中输入的内容,想把这个内容转化成字节发给服务端,比如CEdit框输入“123456”
那么发给服务端的应该是三个字节的内容格式12 34 56,但是传输的内容总是空的,但是调试的时候data里保存的结果是对的data[0]=18,data[1]=52,data[2]=86
发送的代码如下: CString strCmd = "";
GetDlgItemText(IDC_EDIT_NODEID, strCmd);
char data[10];
int strLen = Str2Hex(strCmd, data);//Str2Hex()就是将字符串转换成字节的,data是保存字节的char数组
if (m_clientSocket.m_bConnected)
{
m_clientSocket.m_nLength = m_MSG.GetWindowText(data, strLen); m_clientSocket.AsyncSelect(FD_WRITE);
}
那么发给服务端的应该是三个字节的内容格式12 34 56,但是传输的内容总是空的,但是调试的时候data里保存的结果是对的data[0]=18,data[1]=52,data[2]=86
发送的代码如下: CString strCmd = "";
GetDlgItemText(IDC_EDIT_NODEID, strCmd);
char data[10];
int strLen = Str2Hex(strCmd, data);//Str2Hex()就是将字符串转换成字节的,data是保存字节的char数组
if (m_clientSocket.m_bConnected)
{
m_clientSocket.m_nLength = m_MSG.GetWindowText(data, strLen); m_clientSocket.AsyncSelect(FD_WRITE);
}
{
if((c>='0')&&(c<='9'))
return c-0x30;
else if((c>='A')&&(c<='F'))
return c-'A'+10;
else if((c>='a')&&(c<='f'))
return c-'a'+10;
else
return 0x10;
}int CNodeInfoDlg::Str2Hex(CString str, char* data)
{
int t,t1;
int rlen=0,len=str.GetLength();
for(int i=0;i<len;)
{
char l,h=str[i];
if(h==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
l=str[i];
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))
break;
else
t=t*16+t1;
i++;
data[rlen]=(char)t;
rlen++;
}
return rlen;
}
void MySocket::OnSend(int nErrorCode)
{
Send(m_szBuffer, m_nLength, 0); m_nLength = 0; CInterentClientApp* pApp = (CInterentClientApp*)AfxGetApp();
CInterentClientDlg* pDlg = (CInterentClientDlg*)pApp->m_pMainWnd; CString sendMesg ; sendMesg.Format("%s", m_szBuffer); AfxMessageBox("发送 "+sendMesg); strList.AddTail(sendMesg); memset(m_szBuffer, 0, sizeof(m_szBuffer)); //继续提请一个“读”网络事件,接收server消息, 当有消息时会自动调用OnReceive事件 AsyncSelect(FD_READ); CAsyncSocket::OnSend(nErrorCode);}
GetDlgItemText(IDC_EDIT_NODEID, strCmd);
char data[10];
int strLen = Str2Hex(strCmd, data);
if (m_clientSocket.m_bConnected)
{
int n_Send = m_clientSocket.Send(data, strLen);
}
{
if((c>='0')&&(c<='9'))
return c-0x30;
else if((c>='A')&&(c<='F'))
return c-'A'+10;
else if((c>='a')&&(c<='f'))
return c-'a'+10;
else
return 0x10;
}int CNodeInfoDlg::Str2Hex(CString str, char* data)
{
int t,t1;
int rlen=0,len=str.GetLength();
for(int i=0;i<len;)
{
char l,h=str[i];
if(h==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
l=str[i];
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))
break;
else
t=t*16+t1;
i++;
data[rlen]=(char)t;
rlen++;
}
return rlen;
}
int StringToHex(const char* src,int n)
{
int hex = 0;
for(int k = 0; k < n; k++)
{
hex = hex * 16 + (*src - '0');
++src;
}
return hex;
}
char str[] = "123456";
int data[3];
for(int k = 0; k < 3; k++)
{
data[k] = StringToHex(str + 2 * k,2);
cout<<data[k]<<endl;
}
对于你的情况:
char buff[256];
m_edit.GetWindowText(buff,256);
你接收到的是什么?
receive代码呢?
要发的是这种格式:(0x3e) + 数据长度3字节(ASCII码表示)+包序号(‘0’-‘9’)+‘;’+命令+内容+‘。’其中内容就是我这里data得到的内容,那怎么把这些组合到一起呢。CString strCmd = "";
GetDlgItemText(IDC_EDIT_NODEID, strCmd);
strCmd = "62"+"数据长度"+"包号"+";"+"A"+strCmd+"。";
char data[10];
int strLen = Str2Hex(strCmd, data);
if (m_clientSocket.m_bConnected)
{
int n_Send = m_clientSocket.Send(data, strLen);
}
所以,建议先从网上找一个TCP的检测软件,用户检测自己发送或接收是否正确。如果出现误差,就慢慢寻找原因。