我写了简单服务器和客户端的通讯的程序。可是怎么也不能进行通讯。这是服务器端 这是一个线程。不停的接收客户端的数据。可是它怎么也接收不到客户端发来的数据。// 初始化时需要的一些东西都初始成功了。
long WINAPI Liste(CSocketSvView *pView)
{
char msg[2000]; SOCKADDR_IN Sv;
int SvLen;
int nchar;
TRACE("Liste\n");
while(1)
{
SvLen=sizeof(Sv);
nchar=recvfrom(pView->m_socket,msg,1024,0,(PSOCKADDR)&Sv,&SvLen);
if(nchar<0)
{
//pView->InvalidateRect(NULL);
Sleep(200);
continue;
}
else
{
//TRACE("recvfrom Succeeded\n");
AfxMessageBox("recvfrom Succeeded.");
sendto(pView->m_socket,msg,1024,0,(PSOCKADDR)&Sv,SvLen);
break;
}
} return -1;
}客户端的程序://pView->m_socket 调试都已经成功了。long WINAPI Liste(CSocketClView *pView)
{
char msg[2000];
TRACE("Sending ATTACH command.\n");
wsprintf(msg,"A: ");    // 发送A:
sendto(pView->m_socket,msg,1024,0,(PSOCKADDR)&pView->m_Cl,sizeof(pView->m_Cl));
return -1;
}

解决方案 »

  1.   

    else
    {
    //TRACE("recvfrom Succeeded\n");
    AfxMessageBox("recvfrom Succeeded.");
    //sendto(pView->m_socket,msg,1024,0,(PSOCKADDR)&Sv,SvLen);
    break;
    }
    里面的sendto(...)有什么用啊?!
    接收成功了,再发给自己一次
    去掉,再试试吧
      

  2.   

    赞同tohigh(岁月的童话.NET),同时呢你的SOCKET是设置的阻塞模式吗?
      

  3.   

    谢谢, 我的意思是客户端发一个消息给服务端.服务端收到后再发一个给客户端.现在连服务器端的消息都没有收到.也就是说AfxMessageBox("recvfrom Succeeded.");都没有做到. 我调用了bind了.
      

  4.   

    1、确定服务器是否发了包过来
    2、recvfrom后在if(nchar<0)中用WSAGetLastError检查发生了什么错误。。