📄 subject_40874.htm
字号:
<p>
序号:40874 发表者:泥巴鱼 发表日期:2003-05-22 09:41:55
<br>主题:新手问:CSocket做的"用户登录"测试程序,收到的结果是乱码
<br>内容:我用CSocket做的"用户登录"测试程序,要求先在Client端获得用户名,密码.再把标志位和字符串总长加到前面,合并成一个字符串SendInfo.发送SendInfo到Server端,在Server端用对话框显示一下接收的内容,再返回给Client一个字符串HelloWorld,在Client端显示.运行结果:SendInfo在Client端发出前还是正确的,在Server接收后变成很长的乱码"0015烫烫烫烫烫烫烫烫烫烫烫烫烫烫....",只有前4位显示字符串总长是对的.而从Server端返回的"HelloWorld"在Client端正常显示.可是我写的两边接收的程序代码都一样阿?请哪位高人指点迷津,谢谢!程序代码如下:<BR>Client端:<BR>//建立要发送的字符串SendInfo<BR> CString UserName,PSW,SendInfo;<BR> char temp[4];<BR> int len;<BR> GetDlgItemText(IDC_USERNAME,UserName);<BR> GetDlgItemText(IDC_PSW,PSW);<BR> len=UserName.GetLength()+PSW.GetLength()+8;<BR> itoa(len,temp,10);<BR> SendInfo=(CString)"00"+(CString)temp+"013"+UserName+','+PSW;<BR> AfxMessageBox(SendInfo);<BR><BR> //发送SendInfo到Server端<BR> AfxSocketInit(NULL);<BR> CSocket sockClient;<BR> sockClient.Create();<BR><BR> CString szIP="127.0.0.1";<BR> if(!sockClient.Connect((LPCTSTR)szIP,8000))<BR> {<BR> AfxMessageBox("connect fail!");<BR> return;<BR> }<BR><BR> if(sockClient.Send(SendInfo,sizeof(SendInfo))==SOCKET_ERROR )<BR> {<BR> AfxMessageBox("send fail!");<BR> return;<BR> }<BR><BR> char RecInfo[2000];<BR> sockClient.Receive(RecInfo,sizeof(RecInfo));<BR> AfxMessageBox(RecInfo);<BR>Server端:<BR> CSocket sockSrvr;<BR> CString RecInfo;<BR> sockSrvr.Create(8000);<BR><BR> if(!sockSrvr.Listen())<BR> AfxMessageBox("Listen wrong");<BR> else<BR> AfxMessageBox("Listen right");<BR> CSocket sockRecv;<BR> sockSrvr.Accept(sockRecv);<BR> <BR> if(sockRecv.Receive(RecInfo,sizeof(RecInfo))==SOCKET_ERROR)<BR> {<BR> AfxMessageBox("Server receive fail!");<BR> return;<BR> }<BR> AfxMessageBox(RecInfo);<BR><BR> static char szMessage[]="Hello World!!!!!!!";<BR> sockRecv.Send(szMessage,sizeof(szMessage));<BR> sockRecv.Close();<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:ohye212 回复日期:2003-05-22 09:50:54
<br>内容:);<BR><BR> //发送SendInfo到Server端<BR> AfxSocketInit(NULL);<BR> CSocket sockClient;<BR> sockClient.Create();<BR><BR> CString szIP="127.0.0.1";<BR> if(!sockClient.Connect((LPCTSTR)szIP,8000))<BR> {<BR> AfxMessageBox("connect fail!");<BR> return;<BR> }<BR><BR> if(sockClient.Send(SendInfo,sizeof(SendInfo))==SOCKET_ERROR )<BR> {<BR> AfxMessageBox("send fail!");<BR> return;<BR> }<BR><BR> char RecInfo[2000];<BR> sockClient.Receive(RecInfo,sizeof(RecInfo));<BR> AfxMessageBox(RecInfo);<BR>Server端:<BR> CSocket sockSrvr;<BR> CString RecInfo;<BR> sockSrvr.Create(8000);<BR><BR> if(!sockSrvr.Listen())<BR> AfxMessageBox("Listen wrong");<BR> else<BR> AfxMessageBox("Listen right");<BR> CSocket sockRecv;<BR> sockSrvr.Accept(sockRecv);<BR> <BR> if(sockRecv.Receive(RecInfo,sizeof(RecInfo))==SOCKET_ERROR)//////<BR>/////////////////////////////////////////////////////////////////////////<BR> sizeof(RecInfo)改位1000试试<BR> {<BR> AfxMessageBox("Server receive fail!");<BR> return;<BR> }<BR> AfxMessageBox(RecInfo);<BR><BR> static char szMessage[]="Hello World!!!!!!!";<BR> sockRecv.Send(szMessage,sizeof(szMessage));<BR> sockRecv.Close();
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:泥巴鱼 回复日期:2003-05-22 10:09:51
<br>内容:谢谢ohye212 这么及时回复,可是还是不行,依旧是好多乱码......
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ohye212 回复日期:2003-05-22 10:32:59
<br>内容:CString UserName,PSW,SendInfo;<BR> char temp[4];<BR> int len;<BR> GetDlgItemText(IDC_USERNAME,UserName);<BR> GetDlgItemText(IDC_PSW,PSW);<BR> len=UserName.GetLength()+PSW.GetLength()+8;<BR> itoa(len,temp,10);<BR> SendInfo=(CString)"00"+(CString)temp+"013"+UserName+','+PSW;<BR> AfxMessageBox(SendInfo);<BR><BR> //发送SendInfo到Server端<BR> AfxSocketInit(NULL);<BR> CSocket sockClient;<BR> sockClient.Create();<BR><BR> CString szIP="127.0.0.1";<BR> if(!sockClient.Connect((LPCTSTR)szIP,8000))<BR> {<BR> AfxMessageBox("connect fail!");<BR> return;<BR> }<BR><BR> if(sockClient.Send(SendInfo,sizeof(SendInfo))==SOCKET_ERROR )<BR> {<BR> AfxMessageBox("send fail!");<BR> return;<BR> }<BR><BR> char RecInfo[2000];<BR> sockClient.Receive(RecInfo,sizeof(RecInfo));<BR> AfxMessageBox(RecInfo);<BR>Server端:<BR> CSocket sockSrvr;<BR> // CString RecInfo;<BR> sockSrvr.Create(8000);<BR><BR> if(!sockSrvr.Listen())<BR> AfxMessageBox("Listen wrong");<BR> else<BR> AfxMessageBox("Listen right");<BR> CSocket sockRecv;<BR> sockSrvr.Accept(sockRecv);<BR>//////////////////////////////////////////////试试<BR> char RecInfo[2000]; <BR>memset(RecInfo,0,2000);<BR><BR>////////////////////////////////////////////////////////<BR> if(sockRecv.Receive(RecInfo,sizeof(RecInfo))==SOCKET_ERROR)<BR> {<BR> AfxMessageBox("Server receive fail!");<BR> return;<BR> }<BR> AfxMessageBox(RecInfo);<BR><BR> static char szMessage[]="Hello World!!!!!!!";<BR> sockRecv.Send(szMessage,sizeof(szMessage));<BR> sockRecv.Close();
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:泥巴鱼 回复日期:2003-05-22 11:27:25
<br>内容: 我上面写错了,RecInfo定义成CString时编译不通过.定义成char RecInfo[2000]才可以通过.添加您的代码后,乱码没有了,但是程序只显示"0015"(字符串长度),后面的用户名,密码显示不出来.我又比较了Client和Server的Send函数,猜想是不是因为Client端的sockClient.Send(SendInfo,sizeof(SendInfo))参数SendInfo是CString类型,不是char *,才不通的阿?不过我不会把CString类型改成char*类型,也没法测试,不知道我猜得对不对?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:ohye212 回复日期:2003-05-22 12:30:12
<br>内容:CString UserName,PSW,SendInfo;<BR> char temp[4];<BR> int len;<BR> GetDlgItemText(IDC_USERNAME,UserName);<BR> GetDlgItemText(IDC_PSW,PSW);<BR> len=UserName.GetLength()+PSW.GetLength()+8;<BR> itoa(len,temp,10);<BR> SendInfo=(CString)"00"+(CString)temp+"013"+UserName+','+PSW;<BR> AfxMessageBox(SendInfo);<BR><BR> //发送SendInfo到Server端<BR> AfxSocketInit(NULL);<BR> CSocket sockClient;<BR> sockClient.Create();<BR><BR> CString szIP="127.0.0.1";<BR> if(!sockClient.Connect((LPCTSTR)szIP,8000))<BR> {<BR> AfxMessageBox("connect fail!");<BR> return;<BR> }<BR><BR> if(sockClient.Send(SendInfo,sizeof(SendInfo))==SOCKET_ERROR )<BR> {<BR> AfxMessageBox("send fail!");<BR> return;<BR> }<BR><BR> char RecInfo[2000];<BR> sockClient.Receive(RecInfo,sizeof(RecInfo));<BR> AfxMessageBox(RecInfo);<BR>Server端:<BR> CSocket sockSrvr;<BR> // CString RecInfo;<BR> sockSrvr.Create(8000);<BR><BR> if(!sockSrvr.Listen())<BR> AfxMessageBox("Listen wrong");<BR> else<BR> AfxMessageBox("Listen right");<BR> CSocket sockRecv;<BR> sockSrvr.Accept(sockRecv);<BR>//////////////////////////////////////////////试试<BR> char RecInfo[2000]; <BR>memset(RecInfo,0,2000);<BR><BR>/////////////////////////////////////////////////////////////////////<BR> if(sockRecv.Receive(RecInfo,SendInfo.GetLength())==SOCKET_ERROR)////改变//<BR>//////////////////////////////////////////////////////////////////////////<BR> {<BR> AfxMessageBox("Server receive fail!");<BR> return;<BR> }<BR> AfxMessageBox(RecInfo);<BR><BR> static char szMessage[]="Hello World!!!!!!!";<BR> sockRecv.Send(szMessage,sizeof(szMessage));<BR> sockRecv.Close();
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:泥巴鱼 回复日期:2003-05-22 14:54:59
<br>内容:ohye212,因为我没有写清楚,所以让你误会了.我写的Client是一个Project,Server是另外一个Project.Server里面没有SendInfo,没法用SendInfo的函数.我把这两个Project发上来,方便的话请你帮我看看.对你的帮助,我十分感谢!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:泥巴鱼 回复日期:2003-05-22 15:32:05
<br>内容:终于解决问题了!原因还是出在Client端Send()不能直接发送CString类型的东东,应该把sockClient.Send(SendInfo,sizeof(SendInfo)改成sockClient.Send(SendInfo.GetBuffer(0),SendInfo.GetLength().谢谢ohye212的帮忙!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -