本文主要是介绍C++ Socket如何支持跨平台?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上周,在调试cocos2d-x内置的telnet服务器CCConsole时发现,CCConsole在windows上运行时可以正常启动,但只要一连接telnet客户端就会crash,出错的位置在write()函数,是一个Assert错误,提示file handler 不能大于32;但是,在mac,ios,android(linux还没有测试)都是OK的。
在vs上单步跟了几遍,没看出什么问题,看来得另想办法,我知道winsock的api和unix socket有一些区别,所以考虑用winsock重写一个telnet服务器。先查一下msdn,看看Winsock的函数列表...等等,好像没有write()/read()函数....只有send()/recv(),看来问题很有可能出在这里...把所有的write/read改成send/recv,在windows下测试,可以正常启动telnet了,也可以发命令了,但退出的时候还是会崩溃,出错的位置是close(),原因和前面一样,winsock没有close()函数,要用closeSocket()来关闭socket连接。
问题搞定了,但要吐槽一下winsock,为什么不完全兼容unix socket的api呢?不但没有在编译的时候提示,运行时出错也完全没有可用的提示!!太坑了
这篇关于C++ Socket如何支持跨平台?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!