vs2005 UDP通信只能接收一个字符?解决方案
vs2005 UDP通信只能接收一个字符?
UDP本机通信测试,用matlab发送报文,这边接收,发现发一个字符接收是正确的,发多个字符,接收到的就是乱码。
matlab发送报文:fprintf(u,'%s','abc');
以下是vc写的接收程序部分:
不清楚是matlab发送的报文有问题,还是vc写的接收程序问题,请高手指导,谢谢!
------解决方案--------------------
那应该是编码问题,你先把收到的数据按二进制检查一下,看看是不是和发送的一样
------解决方案--------------------
254*sizeof(WCHAR)
是有问题的,这里应该表示字节的长度,而且是255
应该是255*2*sizeof(BYTE)
------解决方案--------------------
你明明发的是窄字符,却要用unicode版本来显示,怎能不乱?
// TODO: 在此添加专用代码和/或调用基类
char sBuf[255]={0};//定义接收数据的缓冲区
CString sRemoteIP,buf; //远端IP
UINT nRemotePort=41300; // 远端端口
sRemoteIP="127.0.0.1";
//接收数据
ReceiveFrom(sBuf,254*sizeof(char),sRemoteIP,nRemotePort);
//需要对接收的数据做判断处理
CMultiThreadDlg *pDLG = (CMultiThreadDlg*)AfxGetMainWnd();
pDLG->m_edit.ReplaceSel((CString) sBuf);//在编辑框显示
// buf.Format(_T("%s"),sBuf);
------解决方案--------------------
fwprintf
UDP本机通信测试,用matlab发送报文,这边接收,发现发一个字符接收是正确的,发多个字符,接收到的就是乱码。
matlab发送报文:fprintf(u,'%s','abc');
以下是vc写的接收程序部分:
- C/C++ code
void CcmSocket::OnReceive(int nErrorCode) { // TODO: 在此添加专用代码和/或调用基类 WCHAR sBuf[255]={0};//定义接收数据的缓冲区 CString sRemoteIP,buf; //远端IP UINT nRemotePort=41300; // 远端端口 sRemoteIP="127.0.0.1"; //接收数据 ReceiveFrom(sBuf,254*sizeof(WCHAR),sRemoteIP,nRemotePort); //需要对接收的数据做判断处理 CMultiThreadDlg *pDLG = (CMultiThreadDlg*)AfxGetMainWnd(); pDLG->m_edit.ReplaceSel(sBuf);//在编辑框显示 buf.Format(_T("%s"),sBuf);
不清楚是matlab发送的报文有问题,还是vc写的接收程序问题,请高手指导,谢谢!
------解决方案--------------------
那应该是编码问题,你先把收到的数据按二进制检查一下,看看是不是和发送的一样
------解决方案--------------------
254*sizeof(WCHAR)
是有问题的,这里应该表示字节的长度,而且是255
应该是255*2*sizeof(BYTE)
------解决方案--------------------
你明明发的是窄字符,却要用unicode版本来显示,怎能不乱?
// TODO: 在此添加专用代码和/或调用基类
char sBuf[255]={0};//定义接收数据的缓冲区
CString sRemoteIP,buf; //远端IP
UINT nRemotePort=41300; // 远端端口
sRemoteIP="127.0.0.1";
//接收数据
ReceiveFrom(sBuf,254*sizeof(char),sRemoteIP,nRemotePort);
//需要对接收的数据做判断处理
CMultiThreadDlg *pDLG = (CMultiThreadDlg*)AfxGetMainWnd();
pDLG->m_edit.ReplaceSel((CString) sBuf);//在编辑框显示
// buf.Format(_T("%s"),sBuf);
------解决方案--------------------
fwprintf