学习了两个多月的MFC了,目前还是举步为艰,解决很小的问题都要很长的时间。现在正在学习网络编程(及其初级的)。前些天在“中国制造”的帮助下,弄清楚了一些服务器端的一些东西,目前就告一段落了,现在正在想办法解决客户端的问题。问题如下:当客户端与服务器断开用了CLOSE(),那么想再CONNECT就要等4分钟的时间。问题!!******那么有没有办法能使客户端在断开后能马上CONNECT的方法呢?我在程序里用   delete m_sockcli;
              m_sockcli = NULL;,可是还是不行。我用别人的程序测试,服务器没有问题,那么问题就集中在客户端了!请大家帮我看看,给我些指点把!不胜感激!!!

解决方案 »

  1.   

    //重用本地端口
    int nReuseOn=1, setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&nReuseOn, sizeof(nReuseOn));
      

  2.   

    怎么会呢?关闭以后马上就可以重新connect的完整的关闭socket代码贴出来看一下呢?:)
      

  3.   

    小猪,TCP是有这个特性的,不过时间可能没这么长。
      

  4.   

    我怀疑你没有完全断开,因此你和服务器还保持着连接,当然不能再次连上,
    5分钟以后应该是服务器没有收到客户端的响应,超时断开了。
    当然这只是我的怀疑,你可以在客户端关闭之后,马上用命令行netstat -o -a看看你的端口有没有被释放,是不是真的和服务器断开了。
      

  5.   

    我的源程序!:http://www.hlxinformation.com.cn/mycli.rar
      

  6.   

    请大家帮帮我把!!改完后请发给我:[email protected]
      

  7.   

    void CMycliDlg::OnDisconnect() 
    {
       m_sockcli->CancelBlockingCall();//加这个试试看
       delete m_sockcli;
       m_sockcli = NULL;
    // m_connect.EnableWindow(TRUE);
    m_disconnect.EnableWindow(FALSE);
    // TODO: Add your control notification handler code here
    }void CHLXSocket::OnClose(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    CMycliDlg *pDlg =(CMycliDlg*) AfxGetApp()->GetMainWnd ();
    pDlg->m_msglist.InsertItem (0,"server closed"); //pDlg->OnDisconnect();//这句删了!

    CSocket::OnClose(nErrorCode);
    }
      

  8.   

    你的代码,真是,从内容到形式,我完全看不惯,建议看看编程规范,然后扔掉CSocket!
      

  9.   

    我把服务器端程序也贴上了,多谢大家批评指教!问题解决了,我把全部分数奉献给大家!
    http://www.hlxinformation.com.cn/mysvr.rar
      

  10.   

    http://www.vczx.com/article/show.php?id=790
      

  11.   

    http://www.hlxinformation.com.cn/mysvr.rar
    http://www.hlxinformation.com.cn/mycli.rar请大家帮忙呀!!我一共有190分,一定一分不留,全都给大家!!
    发油箱:[email protected]
      

  12.   

    释放套结字句柄Closesocket(),在连接之前重建clientsocket = Socket(...), 然后再connect
      

  13.   

    http://www.hlxinformation.com.cn/mysvr.rar
    http://www.hlxinformation.com.cn/mycli.rar请大家帮忙呀!!我一共有190分,一定一分不留,全都给大家!!
    发油箱:[email protected]
      

  14.   

    TO coolmei25(梅生)   我很想帮你修改代码的,可是下载了你客户端的代码一看了半天。-_-b   我个人觉得这样的代码,即使修改好了正常工作了也没什么意思,因为我觉得代码的整个结构比较糟糕,如果你以后就沿着这个方向走下去的话是不大好的。。你要是真的想学的话,我可以一步一步的教你,如果有兴趣的话就给我发消息   尽量不要去用CSocket,更不要从CSocket来继承,就直接用socket的api来写就好了,结构更清晰也更容易理解   
      

  15.   

    可能没调用Closesocket()释放套接字哦,
      

  16.   

    我以前也看过类似的撒,不过不是四分钟,比这短一点,解决方法就是地址重用啊。
    同意kingzai() 的。^_^
      

  17.   

    其实你先用CSocket 写程序只能写来玩玩,要是真的
    用在产品代码中肯定不行,最终还是用API;
    你最好向:
    释放套结字句柄Closesocket(),在连接之前重建clientsocket = Socket(...), 然后再connect
    怎么会连接不上?
    你没必要一直在一个sokcet上连接,重新建立一个不是得了?
      

  18.   

    楼主在发送端也同样绑定了端口,那是有这样的问题的,你可以试试kingzai说的重用端口的办法其实既然你的客户端没有监听作用,那么客户端就直接可以不用绑定端口了:)
      

  19.   

    如果不绑定端口,系统会随机为你的连接socket分配一个端口,这样就不会出现类似的问题了
      

  20.   

    “那么有没有办法能使客户端在断开后能马上CONNECT的方法呢?”
    ??
    呵呵~~
    这个“马上” 指多少时间啊??
    呵呵~~断了 再连 
    服务端 要接受 你的链接啊 他要想:)呵呵~~
    除非你是假 “离婚” :)
      

  21.   

    现在可以结帖了!!多谢大家的帮助,尤其谢谢PiggyXP(【小猪】、: gdy119(中国制造) 、 konista、wwwllg的帮助和批评!由于现在是学习阶段,更多的注意力放在了功能实现上,那么现在功能已经基本实现了,我接下来准备按照PiggyXP老师给指的方向,放弃用CSOCKET了,改用SOCKET的API了,我在网上也看到了PiggyXP(【小猪】老师的关于《重叠模型的基础知识》,这就开始潜心研究。遇到了问题还请诸位老师顶力相助。我想到了用CSOCKET解决我的问题的方法了:就是换一个端口号去连接,呵呵,原来那个就不管它了。