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;
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;
recv(m_Accept, (char*)&buff, sizeof(buff), 0);你的buff怎么定义的?你的recv返回的值是什么?先看看
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");
}
}
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;
{ // 发送信息
m_Msg.SetSel(-1, -1);char buff[1000] = {0};
CString str;GetDlgItemText(IDC_IME, str); // 得到发送内容
str.GetBuffer(0); // CS转charint 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,服务端怎么会接收到信息呢?
.
.
GetDlgItemText(IDC_IME, str); // 得到发送内容
strcpy(buff,str);//如果是ANSI的话
int Ret = send(m_Connect, (char*)&buff,sizeof(buff),0);
.
.
.
.
.
中的buff是怎么定义的.
如果你的buff是数组类型,到是没事.
如果是一个指针类型的话这样写(char*)&buff,就不知道指到哪里去了,收到的数据.
另外,如果是数组,因为buff本身就已经是指针,没必要加一个&. 直接写成(char*)buff即可.
我用的是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");
}