网络编程之windows/Linux比较

    在公司编了快半年的网络程序,在WinCE下,Ubuntu下来回移植,WinCE和Windows还是没有什么太大的区别的,无非是注意下内存泄露的问题,主要是Win和Linux的有关网络的库文件不一样,所以导致了同样是C、C++,两者之间有很大的区别,废话不多说,总结下我遇到的差异(顺序为Windows -> Linux):

    1、头文件:

    #include or #include

    #include

  • 添加#program comment(lib,"Ws2.lib")
  • 默认windows.h文件会包含winsock.h,当你包含winsock2.h就会冲突。要解决这个问题,需要首先包含winsock2.h,然后再包括windows.h,要注意包含的顺序。

    2、socket初始化与关闭:

    Windows需要 WSAStartup(),closesocket(...)函数

    Linux不需要初始化,结束socket用close(...)

    3、类型声明:

    SOCKET

    int

  • 在Windows里将SOCKET宏定义成unsigned int

    4、错误返回码:

    windows下getlasterror()/WSAGetLastError()/SOCKET_ERROR

    linux下errno变量

  • SOCKET_ERROR=-1

    5、设置非阻塞:

    ioctlsocket(server_socket,FIONBIO,&ul);

    ioctlsocket在Linux中没有定义,用fcntl替代即可,但要包含fcntl.h头文件。

    #include

    fcntl(server_socket,F_SETFL, O_NONBLOCK);

    6、send函数最后一个参数:

    windows下一般设置为0 

    linux下最好设置为MSG_NOSIGNAL,禁止send()函数向系统发送异常消息。如果不设置,在发送出错后有可能会导致程序退出。

    先总结这么多吧,socket编程是网络编程中比较重要的一个部分,对理解TCP/IP协议也有一定的帮助。当然,如果是通信的朋友仅仅知道socket是远远不够的,它封装了协议的具体实现,所以,我希望有兴趣的朋友深入分析一下socket内部实现,我相信一定会对网络协议有更深入的理解。

    还有想说说程序移植问题,windows和WinCE就不多说了,它们出于同门,自然有千着丝万缕的联系,偶有不同也就是由于系统简化和内存限制的问题。windows和Linux就不一样了,从内核到函数,有着太多的不一样,但是,这不妨碍聪明的人们在两个系统平台上进行移植操作,也在互联网上总结了无数的精华文章。当遇到移植问题,系统不兼容的问题的时候,一定要坚持,网上找解决方法,那你就站在巨人的肩膀上,如果自己找到答案那你就是那个巨人!与君共勉!

分享到:
  最后修改于 2010-03-19   阅读( 102) 评论( 1)
上一篇: 上一篇(锁定) 下一篇:tc -help

评论     想第一时间抢沙发么?

淘宝皇冠店铺大全6716

01月09日 19:35
回复

在此新年之际,,向你问个好,办事处处顺,生活步步高,好运天天交,越长越俊俏,家里出黄金,墙上长钞票,还要天天笑。

(手机看博客)


共1页  |  第一页 上一页 1 下一页 最末页
由于最近广告泛滥,暂只允许登录用户对此文评论。 登录

你可能感兴趣的:(linux)