1. WM_APP: 想要定义其自己消息的应用程序应该使用WM_APP。WM_APP 是确保不会与系统(WM_CREATE 等等)或类/特定控件消息如DM_GETDEFID 相冲突的。 2. WSACleanup: 每次调用WSAStartup,都要调用相应的WSACleanup;因为每次启动调都会增加加载winsock DLL的引用计数,因此必须调同样多的WSACleanup,以减少引用计数 3. Winsock API: 在“传输层”和“会话层”之间。 4. TCP/UDP: TCP:可靠连接。字节流,无报文边界。 UDP:无确认,不可靠,无连接。有报文边界。 5. 端口: 0~1023:系统保留; 1024~65535:用户使用; 6. 同时打开的套接字数目:不固定的,与可用的物理内存有关。 7.一般受到SOCKET_ERROR后,除了WSAEWOULDBLOCK, 都应该关闭套接字,因为它不能再用了。 8. recv可以“消息取数”,即偷看。但不好,性能下降(2次系统调用)。 9. recv:把数据留在参数缓冲中不好,那样剩余缓冲量将减少,可能使系统减少发送端TCP窗口容量,从而使网络流量减少。所以最好把接收到的数据复制到自己的buffer中。 10. send: TCP流情况下,发出的字节也许少于理想的字节。解决方法:用一个循环发送。 11. TCP流情况下,10个send, 也许被1-2个recv就全接收了。 12. UDP: 有connect, 可使用send; 无connect, 只可使用sendto 13. WSAEWOULDBLOCK: 很多情况下,都可能出现。 14. GetLastError: 独立与线程的,线程之间各自有各自的,不影响!!! 15. MailSlot: 客户机到服务器,不可靠,单向。垃圾! 16. 消息长了,尽量考虑面向连接,因为无连接分片,丢一个就白折腾了 |