为什么接收的数据是空内容?

luofushan 2012-06-26 07:45:53
case FD_READ: // 读数据
recv(m_Accept, (char*)&buff, sizeof(buff), 0);
//str = buff; // char 转 CString
str.Format(L"%s",buff);
m_Msg.ReplaceSel(str + L"\n");
MessageBox(str, NULL, MB_OK);
break;
...全文
186 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
luofushan 2012-06-27
  • 打赏
  • 举报
回复
解决了 谢谢...第二个客户端进行连接的时候 第一个就断连了.......
luofushan 2012-06-27
  • 打赏
  • 举报
回复
发送端那里我要怎么改呢
我用的是2010 VS

我改成这样报错..
m_Msg.SetSel(-1, -1);

char buff[1000] = {0};
CString str;

GetDlgItemText(IDC_IME, str); // 得到发送内容
//str.GetBuffer(0); // CS转char
strcpy(buff, str);//如果是ANSI的话

//int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
int Ret = send(m_Connect, (char*)buff,sizeof(buff),0);



if (Ret == SOCKET_ERROR)
{ m_Msg.ReplaceSel(L"发送信息失败。\n");
}else
{ m_Msg.ReplaceSel(str + L"\n");
}
xiaohuh421 2012-06-27
  • 打赏
  • 举报
回复
recv(m_Accept, (char*)&buff, sizeof(buff), 0);
中的buff是怎么定义的.
如果你的buff是数组类型,到是没事.
如果是一个指针类型的话这样写(char*)&buff,就不知道指到哪里去了,收到的数据.
另外,如果是数组,因为buff本身就已经是指针,没必要加一个&. 直接写成(char*)buff即可.
振翅高飞 2012-06-27
  • 打赏
  • 举报
回复
.
.
.
GetDlgItemText(IDC_IME, str); // 得到发送内容
strcpy(buff,str);//如果是ANSI的话
int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
.
.
.
.
.
振翅高飞 2012-06-27
  • 打赏
  • 举报
回复
void C客户端Dlg::OnBnClickedSend()
{ // 发送信息
m_Msg.SetSel(-1, -1);

char buff[1000] = {0};
CString str;

GetDlgItemText(IDC_IME, str); // 得到发送内容
str.GetBuffer(0); // CS转char

int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
if (Ret == SOCKET_ERROR)
{ m_Msg.ReplaceSel(L"发送信息失败。\n");
}else
{ m_Msg.ReplaceSel(str + L"\n");
}
}

我认为是你的客户端有问题:
你的buff 根本没有被赋值,还是初始化的{0}就直接发给服务端了,str根本没赋值给buff,服务端怎么会接收到信息呢?
cityhunter_bj 2012-06-27
  • 打赏
  • 举报
回复
SOCKET m_Listen;
SOCKET m_Accept;
1.
WSAAsyncSelect(m_Listen, m_hWnd, WM_SOCKET, FD_ACCEPT|FD_READ);
2.
case FD_READ: // 读数据
recv(m_Accept, (char*)&buff, sizeof(buff), 0);//若buff为空则无法接收内容了,建议改为1024
str.Format(L"%s",buff);
MessageBox(str, NULL, MB_OK);
break;
luofushan 2012-06-27
  • 打赏
  • 举报
回复
SOCKET m_Listen;
SOCKET m_Accept;
1.
WSAAsyncSelect(m_Listen, m_hWnd, WM_SOCKET, FD_ACCEPT|FD_READ);
2.
case FD_READ: // 读数据
recv(m_Accept, (char*)&buff, sizeof(buff), 0);
str.Format(L"%s",buff);
MessageBox(str, NULL, MB_OK);
break;
发送端

void C客户端Dlg::OnBnClickedSend()
{ // 发送信息
m_Msg.SetSel(-1, -1);

char buff[1000] = {0};
CString str;

GetDlgItemText(IDC_IME, str); // 得到发送内容
str.GetBuffer(0); // CS转char

int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
if (Ret == SOCKET_ERROR)
{ m_Msg.ReplaceSel(L"发送信息失败。\n");
}else
{ m_Msg.ReplaceSel(str + L"\n");
}
}
henry.x 2012-06-27
  • 打赏
  • 举报
回复
不是 吧 ,有可能 出错的地方 很多 ,这段 代码 说明不了 问题 ,看不出 问题,把你的 代码 在贴出来一点!
luofushan 2012-06-27
  • 打赏
  • 举报
回复
返回值为 1000.
Eleven 2012-06-26
  • 打赏
  • 举报
回复

recv(m_Accept, (char*)&buff, sizeof(buff), 0);

你的buff怎么定义的?你的recv返回的值是什么?先看看
hyqok 2012-06-26
  • 打赏
  • 举报
回复
网络编程,相当复杂一点,可能出问题的地方会多一点,你给的信息太少。
哥没法回答你。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧