1.windows的socket函数分为两类,一类是Socket Functions(符合Berkeley Sockets routines)另一类是Microsoft Windows-Specific Extension Functions(对Berkeley Sockets routines的扩展)它们之间是什么关系有何区别。各自有何特性。 (此题30分)
2.关于WSAStartup函数。在MSDN中,提到The WSAStartup function must be the first Windows Sockets function called by an application or DLL. 在windows控制台中编写的Windows Socket API程序如不用此函数Socket将无法创建成功。而通过MFC程序生成向导生成的Dialog程序中,不用WSAStartup函数并不影响创建Socket。为什么? (此题20分)
3.recv函数合适返回接收到的数据?在接收数据填满buffer和填不满的情况下分别说明一下 (此题20分)4.bind函数。做为客户机,可以不用bind函数,但是也可以用。此时我的机器ip是172.x.x.x 但是我用bind绑定一个192.x.x.x的地址并不出错,这个192.x.x.x究竟绑定成功了吗?函数调用依次为 socket,bind,connect,recv  (此题30分)

解决方案 »

  1.   

    (1)俺的感觉Microsoft Windows-Specific Extension Functions就是用起来方便些,应该还是对Socket Functions的封装。如果考虑以后程序的跨平台移植,或者想熟练任何平讨的socket开发,那就别用WS,否则,用用也不错;(2)可能框架自动生成了对WSAStartup的调用,比如在某个基类中;(3)recv会返回接受到的字节数或者-1(出错)。有这个还不够么?(4)真的吗?bind返回0了?你的机器只有一个IP地址么?
      

  2.   

    2、afxsockinit();
    3、recv有返回值得呀,还要说明什么?
      

  3.   

    关于第二个问题recv,我的意思是说,什么时候把buffer的内容给返回了?
    bind我绑定了一个并不是我这台机器的地址,也能编译,没有出错,运行也未出错。我用绑定此错误ip的socket连telnet,未出错既然Microsoft Windows-Specific Extension Functions对Socket Functions封装,还要调用WSAStartup干什么?就是这点不明白啊
      

  4.   

    3.也就是说你要接收数据是反复调用recv还是只用执行一次,任何接收都可以即时的反映在buffer里面?
      

  5.   

    我想winsock特有的api主要在功能上大为增强和细化,如
    1.提供了更多的I/O模型:
    除bsd socket的select外,还有WSAAsyncSelect、WSAEventSelect、重叠I/O、
    scatter/gather类型的I/O、支持IOCP等
    2.细化的多协议支持以及对一些新特性的支持
    如WSASocket包含一个LPWSAPROTOCOL_INFO参数
    如QOS
    3.细节上的强化
    如WSAAccept有一个回调函数的参数,用于决定某个连接被拒绝还是接受
    如AcceptEx可以在接受连接的同时读取客户端发送的第一块数据,另外还支持重叠I/O
    等等
    mfc向导对socket初始话的支持主要是自动生成代码调用AfxSocketInit(在InitInstance中)
    类似的还包括AfxOleInit等
      

  6.   

    服务器需要bind
    如果bind一个错误地址或者端口
    客户端socket应该connect不上来的吧
      

  7.   

    bind不为零,看来还是不行,出错了