关于socket服务器收不了信息

我是socket新手,只想学着做个客户端发信息,服务器接收这条信息的程序。用的是VS2005,MFC。
在网上看了一个图文说明,照着做了,服务器就是接收不到数据。用现场的好的客户端来测试,还是不行,代码如下:
ChatServerDlg。cpp中:
void CChatServerDlg::SocketReset() //函数实现
{
if(m_ServerSocket!=NULL)
{
delete m_ServerSocket;
m_ServerSocket=NULL;
}
}

void CChatServerDlg::OnClose() //函数实现
{
m_ListWords.AddString(_T("服务器端断开了"));
m_ListWords.SetTopIndex(m_ListWords.GetCount() - 1);
m_ServerSocket->Close();
SocketReset(); //避免指针悬空
}

void CChatServerDlg::OnReceive() //这个进不了
{
/*char szTemp[200];
int n = m_ClientSocket->Receive(szTemp,200);
szTemp[n] = '\0';
CString sTemp;
sTemp.Format(_T("收到:%s"),szTemp);
m_ListWords.AddString(sTemp);
m_ListWords.SetTopIndex(m_ListWords.GetCount() - 1);*/
*m_archiveIn>>m_Input;
m_archiveIn->Flush();
m_ListWords.AddString(_T("收到:") + m_Input);
m_ListWords.SetTopIndex(m_ListWords.GetCount() - 1);
}

void CChatServerDlg::OnAccept() //这个进不了
{
m_ServerSocket = new MySocket;
m_ServerSocket->GetDlg(this);
m_ListenSocket->Accept(*m_ServerSocket);
m_ServerSocket->AsyncSelect(FD_READ|FD_CLOSE);
m_socketfile = new CSocketFile(m_ServerSocket);
m_archiveIn = new CArchive(m_socketfile,CArchive::load);
m_archiveOut = new CArchive(m_socketfile,CArchive::store);
m_ListWords.AddString(_T("接受了一个客户端的连接请求"));
m_ListWords.SetTopIndex(m_ListWords.GetCount() - 1);
}

void CChatServerDlg::OnBnClickedButton1() //开始监听按钮。这个没问题
{
// TODO: 在此添加控件通知处理程序代码
if(!AfxSocketInit()) //初始化套接字
{
MessageBox(_T("WindowSocket initial failed!"),_T("Send"),MB_ICONSTOP);
return;
}
m_ListenSocket = new MySocket;
m_ListenSocket->GetDlg(this);
BYTE nFild[4];
CString sIP,sP;
UpdateData();
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(_T("%d.%d.%d.%d"),nFild[0],nFild[1],nFild[2],nFild[3]);
sP.Format(_T("%d"),sPort);
m_ListenSocket->Create(sPort,1,sIP); //创建服务端监听Socket
m_ListenSocket->Listen(1); //开始监听
m_ListWords.AddString(_T("监听开始:"));
m_ListWords.AddString(_T("地址") + sIP + _T(" 端口") + sP);
m_ListWords.AddString(_T("等待客户端连接……"));
}

void CChatServerDlg::OnBnClickedButton2() //停止监听按钮。这个不管
{
// TODO: 在此添加控件通知处理程序代码
if(m_ListenSocket!=NULL)
{
delete m_ListenSocket;
m_ListenSocket = NULL;
}
m_ListWords.AddString(_T("停止监听"));
}

void CChatServerDlg::OnBnClickedButton3() //断开按钮。这个不管
{
// TODO: 在此添加控件通知处理程序代码
SocketReset();
m_ListWords.AddString(_T("与客户端断开"));
}

void CChatServerDlg::OnBnClickedButton4() ///发送信息按钮。这个不管
{
// TODO: 在此添加控件通知处理程序代码
CString strstr;
m_edit2.GetWindowTextW(strstr);
int ddd=CStringA(strstr).GetLength();
char a[5000];
ConvertCStringToCharArray(strstr,a);
UpdateData();
m_ServerSocket->Send(a,ddd+1,0); //发信息
CString str2;
str2.Format(_T("发送:%s"),strstr);
m_ListWords.AddString(str2);
m_ListWords.SetTopIndex(m_ListWords.GetCount() - 1);
}

MySocket.cpp代码如下:
void MySocket::GetDlg(CChatServerDlg * dlg) //获得窗口界面的指针
{

m_dlg=dlg;

}

void MySocket::OnClose(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类

m_dlg->OnClose();

CSocket::OnClose(nErrorCode);

}

void MySocket::OnReceive(int nErrorCode)//
{
// TODO: 在此添加专用代码和/或调用基类

m_dlg->OnReceive();
AsyncSelect(FD_CLOSE|FD_READ|FD_WRITE);

CSocket::OnReceive(nErrorCode);

}

void MySocket::OnAccept(int nErrorCode)//这个可以进去,并且一直运行到末尾,然后就不知道运行到哪了,然后就没反应了
{
// TODO: 在此添加专用代码和/或调用基类

((CChatServerDlg *)(AfxGetApp()->m_pMainWnd))->m_ListWords.AddString(_T("接受了一个客户端的连接请求"));  
((CChatServerDlg *)(AfxGetApp()->m_pMainWnd))->m_ListWords.SetTopIndex(
((CChatServerDlg *)(AfxGetApp()->m_pMainWnd))->m_ListWords.GetCount()-1);

CSocket::OnAccept(nErrorCode);

}

3个回答

所以跪求高手教一教我。。。。。。。。。。。。。。跪求

MySocket::OnAccept 中发送消息给主线程。,PostMessage,然后让主线程来操作UI

请问一下,发送消息给主线程,让主线程来操作UI,具体代码怎么写。。。新手求教。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐