在公司编了快半年的网络程序,在WinCE下,Ubuntu下来回移植,WinCE和Windows还是没有什么太大的区别的,无非是注意下内存泄露的问题,主要是Win和Linux的有关网络的库文件不一样,所以导致了同样是C、C++,两者之间有很大的区别,废话不多说,总结下我遇到的差异(顺序为Windows -> Linux):
1、头文件: #include <winsock.h> or #include <winsock2.h> #include <sys/socket.h>
2、socket初始化与关闭: Windows需要 WSAStartup(),closesocket(...)函数 Linux不需要初始化,结束socket用close(...) 3、类型声明: SOCKET int
4、错误返回码: windows下getlasterror()/WSAGetLastError()/SOCKET_ERROR linux下errno变量
5、设置非阻塞: ioctlsocket(server_socket,FIONBIO,&ul); ioctlsocket在Linux中没有定义,用fcntl替代即可,但要包含fcntl.h头文件。 #include <fcntl.h> fcntl(server_socket,F_SETFL, O_NONBLOCK); 6、send函数最后一个参数: windows下一般设置为0 linux下最好设置为MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。如果不设置,在发送出错后有可能会导致程序退出。 先总结这么多吧,socket编程是网络编程中比较重要的一个部分,对理解TCP/IP协议也有一定的帮助。当然,如果是通信的朋友仅仅知道socket是远远不够的,它封装了协议的具体实现,所以,我希望有兴趣的朋友深入分析一下socket内部实现,我相信一定会对网络协议有更深入的理解。 还有想说说程序移植问题,windows和WinCE就不多说了,它们出于同门,自然有千着丝万缕的联系,偶有不同也就是由于系统简化和内存限制的问题。windows和Linux就不一样了,从内核到函数,有着太多的不一样,但是,这不妨碍聪明的人们在两个系统平台上进行移植操作,也在互联网上总结了无数的精华文章。当遇到移植问题,系统不兼容的问题的时候,一定要坚持,网上找解决方法,那你就站在巨人的肩膀上,如果自己找到答案那你就是那个巨人!与君共勉! |
网络编程之windows/Linux比较
最新推荐文章于 2023-11-09 12:26:37 发布
评论 想第一时间抢沙发么?
淘宝皇冠店铺大全6716
01月09日 19:35在此新年之际,,向你问个好,办事处处顺,生活步步高,好运天天交,越长越俊俏,家里出黄金,墙上长钞票,还要天天笑。
(手机看博客)