关于MFC实现两台电脑通信的发送与接收信息问题

龟仙(松虚) 2020-11-23 10:37:47
应该是连接通了的,相关代码如下,发送可以,但是接收没法接收到。
void MySocket::OnReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
TCHAR TBuffer[4096]={0};

m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);

CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
DNetWorkChess *pDlg=(DNetWorkChess *)pFrame->GetActiveWindow();

MultiByteToWideChar(0,0,m_szBuffer,-1,TBuffer,4069);

AfxMessageBox(TBuffer,MB_OK,0);

pDlg->m_LRMSG.InsertString(0,TBuffer);

memset(m_szBuffer,0,sizeof(m_szBuffer));

CAsyncSocket::OnReceive(nErrorCode);
}
红色标注,无法弹出对话框。

void MySocket::OnSend(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
TCHAR TBuffer[4096]={0};

Send(m_szBuffer,m_nLength,0);
m_nLength=0;

MultiByteToWideChar(0,0,m_szBuffer,-1,TBuffer,4069);

AfxMessageBox(TBuffer,MB_OK,0);

memset(m_szBuffer,0,sizeof(m_szBuffer));

AsyncSelect(FD_READ);

CAsyncSocket::OnSend(nErrorCode);
}
发送是可以弹出对话框的。


发送按钮相关代码
void DNetWorkChess::OnBnClickedBsend()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR TCHBuffer[4096];

//if(m_itype==1)
//{
if(m_clientSocket.m_bConnected)
{
m_EMessage.GetWindowTextW(TCHBuffer,4069);
WideCharToMultiByte(CP_ACP, 0,TCHBuffer, -1, m_clientSocket.m_szBuffer, 4069, NULL, NULL);
m_clientSocket.AsyncSelect(FD_WRITE);
m_EMessage.SetWindowText(_T(""));
}
//}
/*else if(m_itype==0)
{
if(m_servSocket.m_pSocket->m_bConnected)
{
m_EMessage.GetWindowTextW(TCHBuffer,4069);
WideCharToMultiByte(CP_ACP, 0,TCHBuffer, -1, m_servSocket.m_pSocket->m_szBuffer, 4069, NULL, NULL);
m_servSocket.m_pSocket->AsyncSelect(FD_WRITE);
m_EMessage.SetWindowText(_T(""));
}
}*/
}
...全文
520 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
龟仙(松虚) 2020-12-03
  • 打赏
  • 举报
回复
引用 4 楼 棉猴 的回复:
您可以再试试,用您的发送程序向TCP助手发送数据,看看能不能收到
我用TCP助手将我的软件连接上了,由TCP助手向我软件发送消息,弹出对话框并收到了消息,不过是怪码。见下图。 但是由我的软件发送信息,TCP助手却收不到,请教大侠,现在可以确定问题所在了吗?
龟仙(松虚) 2020-12-02
  • 打赏
  • 举报
回复
在 MessageBox 的时候,并没有显示任何的信息,根本弹不出来,我怀疑是根本没有传到void MySocket::OnReceive(int nErrorCode)中来,可能是消息机制出了问题。你说的那个pDlg->MessageBox 我可以再试试。
龟仙(松虚) 2020-12-02
  • 打赏
  • 举报
回复
引用 12 楼 fly4free 的回复:
真的好奇怪,有什么东西阻止了新对话框的产生? F5调试输出对话框里,在 MessageBox 的时候,显示出啥有用的信息了吗? —— 不过,现在才发现,你获取了 CMainFrame,还有 一个 dialog ? 你咋不用 pDlg->MessageBox 或者 pFrame->MessageBox 呢? (我提这个只是强迫症表现——一定要提供父窗口,有啥就近用上,没有才传NULL,哈哈)
pDlg->MessageBox 不行,pDlg无MessageBox成员函数。应该不是这方面的问题。
龟仙(松虚) 2020-12-01
  • 打赏
  • 举报
回复
试了,还是弹不出来对话框。 void MySocket::OnReceive(int nErrorCode) { // TODO: 在此添加专用代码和/或调用基类 TCHAR TBuffer[4096]={0}; m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0); CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; DNetWorkChess *pDlg=(DNetWorkChess *)pFrame->GetActiveWindow(); MultiByteToWideChar(0,0,m_szBuffer,-1,TBuffer,4069); MessageBox(NULL,_T("123"), L"123",MB_OK); pDlg->m_LRMSG.InsertString(0,TBuffer); memset(m_szBuffer,0,sizeof(m_szBuffer)); CAsyncSocket::OnReceive(nErrorCode); }
fly4free 2020-12-01
  • 打赏
  • 举报
回复
真的好奇怪,有什么东西阻止了新对话框的产生? F5调试输出对话框里,在 MessageBox 的时候,显示出啥有用的信息了吗? —— 不过,现在才发现,你获取了 CMainFrame,还有 一个 dialog ? 你咋不用 pDlg->MessageBox 或者 pFrame->MessageBox 呢? (我提这个只是强迫症表现——一定要提供父窗口,有啥就近用上,没有才传NULL,哈哈)
fly4free 2020-11-30
  • 打赏
  • 举报
回复
引用 9 楼 龟仙(松虚) 的回复:
我就是用的MFC环境下编写的。用的是MFC下的CAsyncSocket类
...


你试试呗……

另外我记得 AfxMessageBox 是可以 跟进去的。
龟仙(松虚) 2020-11-30
  • 打赏
  • 举报
回复
引用 8 楼 fly4free 的回复:
你用 ::MessageBox 呢? AfxMessageBox 可能需要 MFC 环境
我就是用的MFC环境下编写的。用的是MFC下的CAsyncSocket类 // MySocket 命令目标 class MySocket : public CAsyncSocket { public: MySocket(); virtual ~MySocket(); BOOL m_bConnected; UINT m_nLength; char m_szBuffer[4096]; public: void SetParent(CDialog *pWnd); virtual void OnConnect(int nErrorCode); virtual void OnReceive(int nErrorCode); virtual void OnSend(int nErrorCode); virtual void OnClose(int nErrorCode); };
fly4free 2020-11-30
  • 打赏
  • 举报
回复
你用 ::MessageBox 呢?
AfxMessageBox 可能需要 MFC 环境
龟仙(松虚) 2020-11-28
  • 打赏
  • 举报
回复
引用 6 楼 Eleven 的回复:
先确保数据Send发送没问题,然后用个工具看看数据有没有到达接收端,如果接收端能看到数据,说明是你接收端的代码写的有问题。
我用了TCP助手调试过了,发送接收数据都没有问题,我也试过发送端,发送应该没有问题,出问题的是接收端,但是不知道接收端那个地方有问题。因为网络调试断点和单机也不太一样,所以我用了一个弹出对话框,结果弹不出来,当然接收端的消息框也没有显示了。
Eleven 2020-11-27
  • 打赏
  • 举报
回复
先确保数据Send发送没问题,然后用个工具看看数据有没有到达接收端,如果接收端能看到数据,说明是你接收端的代码写的有问题。
龟仙(松虚) 2020-11-26
  • 打赏
  • 举报
回复
好的,谢谢,但我具体不知道该怎么操作,TCP助手给了什么接口吗?
龟仙(松虚) 2020-11-25
  • 打赏
  • 举报
回复
引用 1 楼 棉猴 的回复:
用一个TCP调试助手试试,看看能不能收到数据。估计还是接受数据时的问题
TCP助手用了,连接上了,并可以相互发送消息。看来还是我程序中出了问题。
棉猴 2020-11-25
  • 打赏
  • 举报
回复
您可以再试试,用您的发送程序向TCP助手发送数据,看看能不能收到
龟仙(松虚) 2020-11-24
  • 打赏
  • 举报
回复
引用 1 楼 棉猴 的回复:
用一个TCP调试助手试试,看看能不能收到数据。估计还是接受数据时的问题
好的,我用netstat先确定了已经相互连接上了,ESTABLISHED。试试你的方法,谢谢。
棉猴 2020-11-24
  • 打赏
  • 举报
回复
用一个TCP调试助手试试,看看能不能收到数据。估计还是接受数据时的问题

18,357

社区成员

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

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