荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (UNIX+C+XML+?? 傻了?), 信区: Linux
标  题: linux下面的应用开发起步--小小的网络? guru (转寄)[转载]
发信站: 荔园晨风BBS站 (Thu Apr 25 10:25:49 2002), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjk.bbs@apue.dhs.org 所发表 】
发信人: guru (好读书,不求甚解), 信区: UNP
标  题: linux下面的应用开发起步--小小的网络蚂蚁(-)(转载)
发信站: UNIX编程 (2001年08月28日18:36:20 星期二), 站内信件


linux下的应用开发起步--简化蚂蚁制作(一)
原创 01-03-17 11:23 200p linuxbird
---------------
-----------------------------------------------------
------------

在读过本栏目先前有关的linux下的编程相关知识后,亲爱的网友。
不知你们是
否开始迫不及待地想开始你的第一个程序啊,
当然不是那种简单的“HELLO
WORLD!”啦(^=^...).
在这里,linuxbird将和你一道作个简单的LINUX下的蚂蚁程序,
就是DOWNLOAD
吧,下载文件,不过呐,
你可别期望它现在就象著名的netants那样强劲啊。

可别期望太高。(嘻嘻。。。。。。)
但是,我觉得,“蚂蚁虽小,五脏俱全”所以,
通过这一例子,还是可以学到
linux下编程的一些精髓。
即使是九牛一毛也是不错的。
OK, 废话少说,LET'S FLY WITH ME!!!!
基本思路是这样的:
利用socket来建立链接,
然后用html的get方法来下载文
件。
具体步骤如下:

1.先从配置文件ant.conf中读取代理服务器
  的的信息:代理服务器地址、代理
服务服务器的端口。
 或者直接从
  命令行中取得这些参数。
2.在取得这些数据后,就可以用开始做DOWNLOAD的工作了,
在这里要明白其
download的指令主要是用HTTP协议的GET方法。
另外以下程序过程中要用到以下
一些系统调用:
 1)socket 所属库<sys/types.h>,<sys/socket.h>

这是最基本的工具,用的时候要把这两个库#include进来。
  有关套接口的详细知识我这里就不多讲了,
主要是用它创建一个套接口。

定义如下:

int socket(int domain,int type,int protocol);

 其中:
     domain为 AF_INET,

第二参数为套接口的类型:SOCK_STREAM或SOCK_DRGAM.这里用前者。
第三个参数为0
  sock返回的是结果存在一个数据结构sockaddr_in中,这个结构如下:
  struct sockaddr_in{

    short int              sin_family;    /* 存放domain*/
    unsigned short int     sin_port;      /*存放链接端口*/

    struct in_addr         sin_addr;      /*存放目标地址*/

    unsigned char      sin_zero[8];   /* 存放该数据结构的长度*/

  }

 2)connect 所属库<sys/types.h>,<sys/socket.h>

在成功创建socket后,就可以进行连接工作了。
该函数头定义如下:
   int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);
 其中:

    sockfd:      创建socket时返回的套接口文件描述字符;

    serv_addr:      指向数据结构sockaddr的指针;
    sin_zero[8]:      长度,可以用sizeof(cockaddr_in);

 3)gethostbyname  所属库<unistd.h>

 这个是根据域名返回IP地址的函数的.
它的返回是指向数据结构 hostent的指针,
该数据结构定义如下:
struct hostent{
        char  *h_name;        /*主机的正式名称*/

  char  **h_aliases;    /* 主机的别名*/

  int   h_addrtype;     /*返回的地址类型,一般是AF_INET*/

  int   h_length;       /* 地址的字节长度*/

  char   **h_addr_list   /*主机的网络地址*/
}

4)sigaction  所属库<signal.h>

  int sigaction(int signum,  const  struct  sigaction  *act,
       struct sigaction *oldact);
 主要是用来处理进程突然中断的,旧的进程将在保存在oldact中的。
oldact是
指向数据结构sigaction
的指针。

 struct sigaction {

 void (*sa_handler)(int);

 sigset_t sa_mask;

 int sa_flags;

 void (*sa_restorer)(void);

}

5)getopt 所属库<unistd.h>

 int getopt(int argc, char * const argv[],
 const char *optstring);

 该函数主要是用来分析命令行中输入参数的。

 其中: optstring为字符匹配串。

 并且取值的结果存放在char *optarg



--
一头栽倒luckylucky的怀里
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.1.61] --
※ 转载:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.36.225]
--
※ 转寄:·UNIX编程 apue.dhs.org·[FROM: 210.39.3.50]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店