这个Socket令我很纠结、两边都接收不了,求大神看看

moon5284 2011-03-06 03:36:38
啥也不说了,贴代码:
=========================SocketServer===========================
-------------------------MySocket:-----------------------------
void CMySocket::OnAccept(int nErrorCode)
{
if(nErrorCode == 0)
m_pDlg->OnAccept();
}

void CMySocket::OnClose(int nErrorCode)
{
if(nErrorCode == 0)
m_pDlg->OnClose();
}

void CMySocket::OnConnect(int nErrorCode)
{
if(nErrorCode == 0)
m_pDlg->OnConnect();
}

void CMySocket::OnReceive(int nErrorCode)
{
if(nErrorCode == 0)
m_pDlg->OnReceive();
}





void CMySocket::SetParent(CSocketServerDlg *pDlg)
{
m_pDlg = pDlg;
}

--------------------SocketServerDlg------------------------


OnInitDialog():
m_strServName = "localhost";
m_nServPort = 1000;
m_sConnectSocket.SetParent(this);
m_sListenSocket.SetParent(this);
void CSocketServerDlg::OnButtonClose()
{
OnClose();
// TODO: Add your control notification handler code here

}

void CSocketServerDlg::OnButtonListen()
{
UpdateData(TRUE);
GetDlgItem(IDC_BUTTON_LISTEN)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SERVNAME)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SERVPORT)->EnableWindow(FALSE);
m_sListenSocket.Create(m_nServPort);
m_sListenSocket.Listen();
// TODO: Add your control notification handler code here

}

void CSocketServerDlg::OnSendMsg()
{
int nLen;
int nSent;
UpdateData(TRUE);
if(!m_strMsg.IsEmpty())
{
nLen = m_strMsg.GetLength();
nSent = m_sConnectSocket.Send(LPCTSTR(m_strMsg),255);
if(nSent != SOCKET_ERROR)
{
m_listSent.AddString(m_strMsg);
UpdateData(FALSE);
}
else
{
AfxMessageBox("ÐÅÏ¢·¢ËÍ´íÎó£¡",MB_OK | MB_ICONSTOP);
}
m_strMsg.Empty();
UpdateData(FALSE);
}
// TODO: Add your control notification handler code here

}

void CSocketServerDlg::OnClose()
{
m_listReceived.AddString("·þÎñÆ÷ÊÕµ½ÁËOnCloseÏûÏ¢£¡");
m_sConnectSocket.Close();
GetDlgItem(IDC_EDIT_MSG)->EnableWindow(FALSE);
GetDlgItem(IDOK)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(FALSE);
while(m_listSent.GetCount() != 0)
m_listSent.DeleteString(0);
while(m_listReceived.GetCount() != 0)
m_listReceived.DeleteString(0);
}

void CSocketServerDlg::OnConnect()
{
GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE);
GetDlgItem(IDOK)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(TRUE);
m_listReceived.AddString("·þÎñÆ÷ÊÕµ½ÁËOnConnectÏûÏ¢£¡");

}

void CSocketServerDlg::OnReceive()
{
m_listReceived.AddString("==½ÓÊÕ==");
char *pBuf = new char[1025];
int nBufSize = 1024;
int nReceived;
CString strReceived;
nReceived = m_sConnectSocket.Receive(pBuf,nBufSize);
if(nReceived != SOCKET_ERROR)
{
pBuf[nReceived] = NULL;
strReceived = pBuf;
m_listReceived.AddString(strReceived);
UpdateData(FALSE);
}
else
{
AfxMessageBox("ÐÅÏ¢½ÓÊÕ´íÎó£¡",MB_OK | MB_ICONSTOP);
}

}

void CSocketServerDlg::OnAccept()
{
m_listReceived.AddString("·þÎñÆ÷ÊÕµ½ÁËOnAcceptÏûÏ¢£¡");
m_sListenSocket.Listen(m_sConnectSocket);
GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE);
GetDlgItem(IDOK)->EnableWindow(TRUE);
}

=========================SocketClient===========================
--------------------------MySocket----------------------------
void CMySocket::OnConnect(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(nErrorCode == 0)
m_pDlg->OnConnect();
//CAsyncSocket::OnConnect(nErrorCode);
}

void CMySocket::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(nErrorCode == 0)
m_pDlg->OnClose();
//CAsyncSocket::OnClose(nErrorCode);
}

void CMySocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if(nErrorCode == 0)
m_pDlg->OnReceive();
}

void CMySocket::SetParent(CSoketClientDlg *pDlg)
{
m_pDlg = pDlg;
}
-----------------------------------SocketClientDlg-----------------------
OnInitDialog():
m_strServName = "localhost";
m_nServPort = 1000;
m_strMsg = "";
m_sConnectSocket.SetParent(this);
void CSocketServerDlg::OnButtonClose()
{
OnClose();
// TODO: Add your control notification handler code here

}

void CSocketServerDlg::OnButtonListen()
{
UpdateData(TRUE);
GetDlgItem(IDC_BUTTON_LISTEN)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SERVNAME)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SERVPORT)->EnableWindow(FALSE);
m_sListenSocket.Create(m_nServPort);
m_sListenSocket.Listen();
// TODO: Add your control notification handler code here

}

void CSocketServerDlg::OnSendMsg()
{
int nLen;
int nSent;
UpdateData(TRUE);
if(!m_strMsg.IsEmpty())
{
nLen = m_strMsg.GetLength();
nSent = m_sConnectSocket.Send(LPCTSTR(m_strMsg),255);
if(nSent != SOCKET_ERROR)
{
m_listSent.AddString(m_strMsg);
UpdateData(FALSE);
}
else
{
AfxMessageBox("ÐÅÏ¢·¢ËÍ´íÎó£¡",MB_OK | MB_ICONSTOP);
}
m_strMsg.Empty();
UpdateData(FALSE);
}
// TODO: Add your control notification handler code here

}

void CSocketServerDlg::OnClose()
{
m_listReceived.AddString("·þÎñÆ÷ÊÕµ½ÁËOnCloseÏûÏ¢£¡");
m_sConnectSocket.Close();
GetDlgItem(IDC_EDIT_MSG)->EnableWindow(FALSE);
GetDlgItem(IDOK)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(FALSE);
while(m_listSent.GetCount() != 0)
m_listSent.DeleteString(0);
while(m_listReceived.GetCount() != 0)
m_listReceived.DeleteString(0);
}

void CSocketServerDlg::OnConnect()
{
GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE);
GetDlgItem(IDOK)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(TRUE);
m_listReceived.AddString("·þÎñÆ÷ÊÕµ½ÁËOnConnectÏûÏ¢£¡");

}

void CSocketServerDlg::OnReceive()
{
m_listReceived.AddString("==½ÓÊÕ==");
char *pBuf = new char[1025];
int nBufSize = 1024;
int nReceived;
CString strReceived;
nReceived = m_sConnectSocket.Receive(pBuf,nBufSize);
if(nReceived != SOCKET_ERROR)
{
pBuf[nReceived] = NULL;
strReceived = pBuf;
m_listReceived.AddString(strReceived);
UpdateData(FALSE);
}
else
{
AfxMessageBox("ÐÅÏ¢½ÓÊÕ´íÎó£¡",MB_OK | MB_ICONSTOP);
}

}

void CSocketServerDlg::OnAccept()
{
m_listReceived.AddString("·þÎñÆ÷ÊÕµ½ÁËOnAcceptÏûÏ¢£¡");
m_sListenSocket.Listen(m_sConnectSocket);
GetDlgItem(IDC_EDIT_MSG)->EnableWindow(TRUE);
GetDlgItem(IDOK)->EnableWindow(TRUE);
}

源代码资源链接:http://download.csdn.net/source/3066636,连接没有问题,发送数据两边都无法接收,请大神相助。。。
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
碎碎念 2011-03-06
  • 打赏
  • 举报
回复
Socket是不能接收数据?还是接收的数据时乱码或者是发送数据的一部分?如果是后者的话,简历工程时,选择"非"unicode library
如果是不能接收数据的话..lz跑跑单步吧...看看是哪一步没成功...
pathuang68 2011-03-06
  • 打赏
  • 举报
回复
MFC中最大的败笔之一就是CSocket及其相关的类。建议楼主写Socket程序,不要用MFC。
delphiwcdj 2011-03-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 super_admi 的回复:]

把字符编码改成非UNICODE试试。
[/Quote]
是啊
dianyancao 2011-03-06
  • 打赏
  • 举报
回复
好危险的字符串,先转换成 fromunioncode 看看
smwhotjay 2011-03-06
  • 打赏
  • 举报
回复
把看av的时间和激情用在编程上...
super_admi 2011-03-06
  • 打赏
  • 举报
回复
把字符编码改成UNICODE试试。
healer_kx 2011-03-06
  • 打赏
  • 举报
回复
为什么注释上了?
//CAsyncSocket::OnConnect(nErrorCode);
moon5284 2011-03-06
  • 打赏
  • 举报
回复
代码传上去了http://download.csdn.net/source/3066636,有各av全集种子赠送,大家帮忙调试一下啊!

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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