在Visual Studio98的Samples中有一个HttpSvr程序,这是一个简单的Web服务器,你可以仔细的研究它一下,一定会获得很多收获。

解决方案 »

  1.   

    CSocket 限制太多,建议直接使用socket 函数或者CAsynScoket.
    如果希望研究,我觉得 Samples中的chat 是直接使用CSocket的,更好一些。
      

  2.   

    CSocket 默认没有 OnAccept() 事件,要调用 AsyncSelect(FD_ACCEPT) 才会有
    OnAccept() 事件,而 CAsyncSocket 默认就能响应所有事件。
      

  3.   

    当然没有必要开线程了,一定是你的程序代码有问题,服务端应该是这样的:
    CSocket sockSrvr,CSocket sockSrecv.
    sockSrvr.Create(nPort),sockSrvr.Listen(),sockSrvr.Accept(sockrecv),这样就只要客户连接过来,服务端就可以接收到了。当然,你也可以从CAsyncSocket派生类来生成自己的SOCKET,具体使用可以参考MSDN中的CHAT程序。
      

  4.   

    不好意思,好象对于Server端,应该是Receive(),而不是Send(),Client端是Send():
    Server->Create(SrvPort)->Listen()->Accept()->Receive()
    Client->Create()->Connect(SrvIP,SrvPort)->Send(Buf,len,...)
    请不妨试一试?
    Client端发送:
             CSocket *mysock=new CSocket();
             if (!mysock->Create(0,SOCK_STREAM,NULL))
    {
    return FALSE;
    }

    if (!mysock->Connect(ServerIp,ServerPort))
    return FALSE;
             if (!mysock->Send(SendBuf,SendLen,0))
    {
    return FALSE;
    }
    Client端接收
             mysock->Receive(RcvBuf,MaxLen,0);以上代码摘自我公司的一个产品,中间环节不便透露,仅提供主要部分。详情请看CSocket类的介绍
      

  5.   

    调用过程是正确的。
    OnAccept()没有被调用,必然内部有错误,你需要逐步检查Create,Listen,Connect等调用是否成功。OnAccept()未调用,客户端Connect()必然失败,调用GetLastError()查看一下错误原因。
    错误原因一般如下:
    1、未调用AfxSocketInit()
    2、用127.*.*.*作地址本地模拟网络,WIN98以网络客户模式登录,Listen()会失败
    3、服务器端口已被其它socket使用,Create(nPort)会失败
      

  6.   

    修正:
    2、用127.*.*.*作地址本地模拟网络,WIN98以网络客户模式登录,Create()会失败
      

  7.   

    没想到第一次提问就有这么多专家回答,真谢谢各位!~~我想问题应该可以解决啦。
    lionpb回答的很详细,但连接后应该双方都可以Send()/Receive()吧。