我想做个聊天室软件,我是初学者还不太理解csocket,我是这么写的,
首先在服务端的OnInitDialog()里面初始化:
CMySocket listing;
   listing.Create(6080,SOCK_STREAM,"127.0.0.1");
   listing.Bind(6080,"127.0.0.1");
   listing.Listen(5);
   listing.Accept(m_sndSocket); //m_sndSocket 是CSocket的一个实例.
但是程序一运行就不动了.知道客户端连接上了才有反映.好像是一直等待连接,没有连接就一直不动似的.我发现把accept去掉就没有这个情况了,但是没这个就不能接收client端的连接了,请问是不是该把accept这个函数放到别的地方或者哪个事件里面去??谢谢指点.

解决方案 »

  1.   

    用select等你listen的端口有反映了,再用accept.
      

  2.   

    另建一个线程,调用OnAccept();
      

  3.   

    select模型、WSAAsyncSelect、WSAEventSelect模型都可以做到
      

  4.   

    详情参见 Windows网络编程 ,^_^。
      

  5.   

    CSocket是阻塞的,不要直接调用Accept你可以在OnAccept时调用Accept(),因为CSocket虽然是阻塞的,但是他是建立在非阻塞的CAsynSocket之上的,所以可以这样使用。
      

  6.   

    建立一个以CSOCKET为基类的新类,在ONACCEPT下再ACCEPT即可,可以在网上找一下这种例子,很多,找不的话留个邮箱,我发给你一个例子就行了
      

  7.   

    我的email是 [email protected]
    麻烦您发个例子给我.谢谢.
      

  8.   

    如果不是很明白csocket类的话,建议还是先用别人写好的CAsyncSocket类,用csocket那些事件全部都要自己来控制!
      

  9.   

    实例可在http://www.vckbase.com里面找
      

  10.   

    CSocket是阻塞的,不要直接调用Accept
    你可以在OnAccept时调用Accept(),建立一个以CSOCKET为基类的新类,在ONACCEPT下再ACCEPT即可,用不着多线程 前面已经有人说的狠清楚了