Beej的网络编程入门教程 第二篇 平台与编译器

    看了目录你可能觉得很有意思(或者很奇怪)5.1.getaddrinfo()---我要准备开始了! getaddrinfo()系统调用后加一个"我要准备开始了"是怎么回事?这是原作者为了方便读者而加上去的,通讯(这里是套接字通讯)嘛当然有双方才可以,所以就做了一点拟人化描述。请正确理解。下面我们就进入正文了。

 

1.基础知识

 

1.1.平台与编译器

 

    后面出现的代码在linux下使用gcc编译完全没有问题,并且这些代码可以使用gcc为各平台产生可执行程序。可以确定的是不能直接在windows系统下使用,有关详细信息请看后面一节"注意事项"。

 

1.2.注意事项

 

1.2.1.solaris/sunos程序员注意事项

 

    在solaris或sunos上编译时,你需要修改一些参数以便加载相关的库文件。就像下面这样:

    $cc -o server server.c -lnsl - lsocket - lresdv

    如果还有错误,你可以试试加入参数"-lxnet",我不太清楚这个参数的作用,也许一些人员需要用到。

    另外一个需要注意的地方是在使用setsocketopt()函数时,此函数的原型与linux上不同。如下:

    替换

    int yes= 1;

    为

    char yes= '1';

    我没有sun的工作环境,所以上面说的这些没有测试;这些信息均是大家通过邮件告知的。

 

1.2.2.windows程序员注意事项

 

    之前我在windows上做过一些工作,我并不喜欢它,但是我不得不说windows是一个非常好的操作系统。

有人说失落让人成长,确实这样;我很高兴自己已经有十多年没有用windows进行个人工作了。我觉得使用windows非常轻松,是的我很肯定这一点。

    我还是要鼓励你去试试linux、BSD或一些unix系统。大家都有自己喜欢的,windows一族一定也愿意了解这些信息。

一件很cool的事是安装cygwin,这是一个unix在windows中的工具,我听说这样做的程序不用修改就可以进行编译了。

也许你想在纯windows下编程,你可真勇敢。也许你听我我的话想马上换个unix回来!不,不我只是开个玩笑。我现在渐渐觉得windows挺友好的。

    你要做的事:首先不要忘记加入系统头文件如下:


    #include <winsock.h>

 

    等一下!在开始之前还需要调用WSAStartup()才能使用套接字进行工作,代码如下:

 

 


    你还必需通知编译器连接winsock库,通常是wsock32.lib或winsock32.lib或ws2_32.lib(2.0版本使用)。使用vc++时,选择项目(project)菜单,选择设置(setting)连接选项卡,有一项对象/模块,键入"wsock32.lib"(或你需要的库文件)。

我还听说:当你使用完套接字后需要调用WSACleanup(),查看在线帮助可获得详细信息。在windows系统下使用本文档中的例子时,大多数是没有问题的有一部分可能有异常发生。一个要注意的是close(),使用它不能关闭套接字而要使用closesocket()。还有select()只能在声明的套接字上使用,不能在文件上使用。

    windows上还有一个csocket类可以使用。查看你的编译器帮助得到更详细的信息。

 

    最后,我听说windows系统中没有fork()调用,在我的例子中有使用过。你可以使用CreateProcess()代替fork()。fork()没有参数,CreateProcess()有一大堆的参数。如果你不想使用它,那么CreateThread()是一个不错的选择,它更容易些。不幸的是关于多线程的话题超出了本文的范围,你知道我只能说到这里了。


第二篇结束。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值