因为最近要做一个小项目,需要windows网络编程方面的知识。而我在这方面并不熟,现在重新面对windows socket感觉api不知道他到底会表达什么目的,网络编程的要点是不是在于错误处理,正确的做好错误处理才能使程序健壮,是吗?我想问的是,网络编程的基本原则就是错误处理的基本原则吗?我举个小例子。
比如TCP协议,才有select模型,使用send发送1024字节数据:
1.成功发送时,send返回值为1024字节。
2.发送不成功,send返回值为ret,此时0<ret<102,然后继续发送余下的数据。
3.发送不成功,send返回-1,此时应该调用WSAGetLastError函数获取错误信息,然后根据错误信息,做进一步处理。是通常这三种吗?因为项目中客户端用到的模型就是select。然后关闭连接,是通常由客户端接收完数据关闭吧。
看msdn说recv返回0表示连接成功关闭,那如何成功关闭一个连接呢?我这边测试的时候(由客户端接收完数据关闭套接字),老是显示连接为成功关闭。求大家三言两语说说哈。

解决方案 »

  1.   

    建议window下看看:window网络编程这本书;
    linux下看看:unix网络编程卷1.
      

  2.   

    本帖最后由 oyljerry 于 2012-12-08 21:38:52 编辑
      

  3.   

    这样没有问题,不过send返回值>0应该就是成功的,<0失败,=0表示socket关闭.
      

  4.   

    Select模型主要还是控制的是读写。
    在异步,多线程控制上面有很大的优势。你说的那个关闭分长连接和短连接,长连接一般不关闭,发心跳。短连接才会close
      

  5.   


    是短连接,短连接关闭的话,是服务器发送完数据完数据就关闭吗?
    貌似如果客户端接收完数据关闭套接字,服务器那边如果select模型中有recv的话,recv会返回0,是吗?
      

  6.   

    看看《WinSock网络编程经络》或这里的例子:
    http://download.csdn.net/detail/geoff08zhang/4571358