我是socket新手。未测试用法,故编了最简单的客户-服务器程序。现在做了两个对话框程序,一个客户端仅负责发送数据;一个服务器负责接收数据。二者均继承与CAsyncSocket,且都在dlg类里面声明了对象。目前客户端发送数据没问题,可是服务器这边有问题,即发送数据后不响应OnReceive()函数。
症状:客户端连接服务器时,服务器端能够响应OnAccept,同时客户端发送信息,服务器Accept之后立即receive()能够接到数据。但是之后客户端再次单击send之后,服务器这端却不能响应OnReceive()。目前百思不得其解。
下面附下代码吧:
/////////////////////////////////////////////////////////////////////////////
// CTcpSocket member functionsvoid CTcpSocket::OnAccept(int nErrorCode) 
{
// 此处能够进入,证明连接没问题。
::MessageBox(NULL,"准许请求,连接","提示",MB_ICONINFORMATION);
Accept(cltSocket); CAsyncSocket::OnAccept(nErrorCode);
}
void CTcpSocket::OnReceive(int nErrorCode) 
{
// 此函数无法得到响应,即不能进入。
::MessageBox(NULL,"接到信息"," ",MB_ICONINFORMATION);

char buf[100+1];
cltSocket.Receive(buf,100,0);
::MessageBox(NULL,buf,"提示",MB_ICONINFORMATION);
CAsyncSocket::OnReceive(nErrorCode);
}//////////////////////////////////////////////////
///////////////服务器对话框///////////////////////此处侦听正常
void CServerDlg::OnListen() 
{
// TODO: Add your control notification handler code here
int port = 8000; if( false == (srvSocket.Create(port)) )
{
::MessageBox(NULL,"无法建立服务器!","错误",MB_ICONINFORMATION);
srvSocket.Close();
}
else
{
if (!srvSocket.Listen())
{
::MessageBox(NULL,"无法侦听客户端!","错误",MB_ICONINFORMATION);
}
else
{
::MessageBox(NULL,"侦听中....","提示",MB_ICONINFORMATION);
}
}
}