CSocket接收数据只接收到第一个字符,该如何处理
CSocket接收数据只接收到第一个字符
很简单的例子,结果每次都只能接收到第一个字符,123就只收到1,abc就只收到a
服务端
客户端
------解决方案--------------------
关注!
------解决方案--------------------
很奇怪,没遇到过,帮顶
------解决方案--------------------
你的CSocket用的很不一般,也没有Create,据我查msdn也没有Socket()的成员函数,你是自己封装过一次弄的么~
------解决方案--------------------
你发送用的是unicode,接受方也必须用unicode处理。使用wchar_t来处理,不能用char
------解决方案--------------------
发送和接收时,建议使用struct,强制转换成PBYTE发送,变长的在struct中指明附加数据长度
接收时验证长度
struct
{
UINT 操作类型;
UINT 附加数据长度;
};
发送时:struct+附加数据
接收时:接收数据长度>=sizeof(struct),接收数据长度-sizeof(struct)应该=struct.附加数据长度
------解决方案--------------------
来关注下。
------解决方案--------------------
如果你想继续用UNICODE环境,在客户端发送之前,先用WideCharToMultiByte将要发送的内容转换成ANSI格式的,再发送。服务端接收到后,用MultiByteToWideChar将接收到的内容再转成宽字节的,试试看
------解决方案--------------------
关注中
------解决方案--------------------
使用 WideCharToMultiByte和MultiByteToWideChar进行宽字符和字符的转换。
很简单的例子,结果每次都只能接收到第一个字符,123就只收到1,abc就只收到a
服务端
- C/C++ code
CSocket s,c;
AfxSocketInit();
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
s.Socket();
s.SetSockOpt(SO_REUSEADDR,(void*)&bOptVal,bOptLen,SOL_SOCKET);
s.Bind(33333);
s.Listen(10);
s.Accept(c);
char msg[256]={0};
int recvLen=0;
c.Receive(msg,256);//但是这边只能收到第一个字符,后面的都没了
客户端
- C/C++ code
CSocket c;
AfxSocketInit();
c.Create();
c.Connect(L"127.0.0.1",33333);
CEdit* ed=(CEdit*)this->GetDlgItem(IDC_EDIT_MSG);
CString msg;
ed->GetWindowTextW(msg);
c.Send(msg,msg.GetLength());//跟踪到这里的确是"abc"
------解决方案--------------------
关注!
------解决方案--------------------
很奇怪,没遇到过,帮顶
------解决方案--------------------
你的CSocket用的很不一般,也没有Create,据我查msdn也没有Socket()的成员函数,你是自己封装过一次弄的么~
------解决方案--------------------
你发送用的是unicode,接受方也必须用unicode处理。使用wchar_t来处理,不能用char
------解决方案--------------------
发送和接收时,建议使用struct,强制转换成PBYTE发送,变长的在struct中指明附加数据长度
接收时验证长度
struct
{
UINT 操作类型;
UINT 附加数据长度;
};
发送时:struct+附加数据
接收时:接收数据长度>=sizeof(struct),接收数据长度-sizeof(struct)应该=struct.附加数据长度
------解决方案--------------------
来关注下。
------解决方案--------------------
如果你想继续用UNICODE环境,在客户端发送之前,先用WideCharToMultiByte将要发送的内容转换成ANSI格式的,再发送。服务端接收到后,用MultiByteToWideChar将接收到的内容再转成宽字节的,试试看
------解决方案--------------------
关注中
------解决方案--------------------
使用 WideCharToMultiByte和MultiByteToWideChar进行宽字符和字符的转换。