void CWinQQDlg::ProcessReceive(CClientSocket* pSocket)
{
wchar_t buffer[BUFFER_SIZE]; int nReceived=pSocket->Receive(buffer,BUFFER_SIZE,0); buffer[nReceived]=0;
CString temp;
temp.Format(_T("%s"),buffer);
m_Msg.AddString(temp);
}void CWinQQDlg::SendMsg(CString strMsg)
{
CString str;
str.Format(_T("%s:%s"),m_Name,strMsg);
wchar_t* p=str.GetBuffer(0);
m_pClient->Send(p,str.GetLength(),0);
}发送的wchar_t数组在接收端的值是不对的,socket传输应该不会出错吧?但为什么接收的值跟传输的值不一样呢?求解决方法(必须使用unicode)编码。
{
wchar_t buffer[BUFFER_SIZE]; int nReceived=pSocket->Receive(buffer,BUFFER_SIZE,0); buffer[nReceived]=0;
CString temp;
temp.Format(_T("%s"),buffer);
m_Msg.AddString(temp);
}void CWinQQDlg::SendMsg(CString strMsg)
{
CString str;
str.Format(_T("%s:%s"),m_Name,strMsg);
wchar_t* p=str.GetBuffer(0);
m_pClient->Send(p,str.GetLength(),0);
}发送的wchar_t数组在接收端的值是不对的,socket传输应该不会出错吧?但为什么接收的值跟传输的值不一样呢?求解决方法(必须使用unicode)编码。
解决方案 »
- vc6.0+ATL COM Wizard+service(exe),多线程,在mfc dialog中写了服务器端,怎么移植到service(exe)中
- 项目中有两个对话框,如何定义当一个关闭,启动另外一个?
- ADO连接Oracle数据库问题
- 简单语音识别程序有问!在线等o(∩_∩)o...哈哈
- VC6中提没提供这个的公共对话框类? 不是选择文件的对话框, 而是只选择文件夹的对话框?
- 添加"确定"按钮怎么设置它,当回车时,确定按钮做出响应,也就是回车默认为确定键
- 兄弟们能不能给推荐个有介绍智能卡(Smart Card)开发的网站或资料?
- SOS求救!500分派送,up有分
- 如何将*.bmp文件编译进执行文件里
- 又一个弱智问题:关于keybd_event(马上给分)
- CFtpFileFind列文件名称错误问题?
- ★★★★★如何从硬盘里读取文件内容,而不是从文件缓存中读取内容,这个能控制吗???★★★★★
{m_pClient->Send(p,str.GetLength() * sizeof(WCHAR),0);
}
这样试试呢
{
wchar_t buffer[BUFFER_SIZE];
int nReceived=pSocket->Receive(buffer,BUFFER_SIZE * 2,0);
CString temp;
temp.Format(_T("%s"),buffer);
m_Msg.AddString(temp);
}void CWinQQDlg::SendMsg(CString strMsg)
{
CString str;
str.Format(_T("%s:%s"),m_Name,strMsg);
wchar_t* p=str.GetBuffer(0);
m_pClient->Send(p,(str.GetLength() + 1) * 2, 0); //这里发送发送结束符,所以加1
//如果不发送结束符,在接收端将会更难处理!
}
<windows网络编程>第七章:
必须牢牢记住这一点:所有关系到收发数据的缓冲都属于简单的c h a r类型。也就是说,这
些函数没有“U n i c o d e”版本。这一点对Windows CE来说尤为重要,因为Windows CE默认使
用U n i c o d e。使用U n i c o d e时有一种选择,即把字符串当作c h a r *或把它造型为c h a r *发送。需要
注意的是,在利用字符串长度函数告诉Winsock API函数收发的数据有多少字符时,必须将这
个值乘以2,因为每个字符占用字串组的两个字节。另一种选择是在将字串数据投给Wi n s o c k
A P I函数之前,用Wi d e C h a r To M u l t i B y t e把U N I C O D E转换成A S C I I码。
代码如下:
void CWinQQDlg::ProcessReceive(CClientSocket* pSocket)
{
/* static CMsg buffer;
pSocket->ReceiveMsg(&buffer);
m_Msg.AddString(buffer.m_strText);*/ wchar_t buffer[BUFFER_SIZE];
memset(&buffer,'\0',sizeof(wchar_t)*BUFFER_SIZE);
pSocket->Receive(&buffer,BUFFER_SIZE*sizeof(wchar_t)); CString temp;
temp.Format(_T("%s"),buffer); m_Msg.AddString(temp);
}void CWinQQDlg::SendMsg(CString strMsg)
{
/*CString str;
str.Format(_T("%s:%s"),m_Name,strMsg);
CMsg msg(str);
m_pClient->SendMsg(&msg);*/ CString str;
str.Format(_T("%s:%s"),m_Name,strMsg);
wchar_t* p=str.GetBuffer(0);
m_pClient->Send(p,(str.GetLength()) *sizeof(wchar_t) , 0);
}如果我输入yi ding yao cheng gong
本地程序显示client:yi ding yao cheng gong
另一端显示:server:yi ding如果我输入wo bu zhi dao
本地程序显示client:wo yaoshixian
另一端显示:server:wo 然后是乱码