Internet超级服务器
Internet超级服务器(一)
简介
如果你想做网络程序设计却没有熟练的编程技巧,那么inetd(Internet超级服务器)将是你最好的选择。通过Linux系统提供的inetd服务,你可以方便的编写网络程序而不用在乎那些看起来高深难懂的套接口函数,你所需要做的只是写一个普通的读写标准输入输出的程序。
ftp/telnet/pop3等都是靠这种方式建立起来的服务。
先编写一个简单的服务程序 hi.c
#include
#include
#include
main(void)
{
printf(\"hi! \");
}
编译后生成文件名为hi可执行文件。这个可执行文件运行后输出“hi!”,但现在只能在本地显示,而我们需要的是能够传输到网络的另一端。
----------待续
Internet超级服务器(二)
设置
首先在本地机器上输入以下命令:
telnet localhost hi
系统会给出错误信息:hi:bad port number。意思是错误的端口号。接着我们在/etc/services中加入以下一行:
hi 20001/tcp
再执行命令:
telnet localhost hi
就会发现系统给出的错误信息变成了:Unable to connect to remote host:Connection refused。意思是系统已经知道hi代表端口20001,但是系统无法和hi端口连接,因为没有任何程序在监听20001端口等待连接。最后我们在/etc/inetd.conf中加入以下一行:
hi stream tcp nowait root /root/temp/hi /hi
每个参数含义为
service_name是需要在系统服务中存在的名称。
sock_type有很多种,大多用stream/dgram。
proto一般用tcp/udp。
flags有wait/nowait。
user是指定该程序用那一个使用者来启动。
server_path及args是服务程序的位置及所想加入的参数。
接下来重新启动inetd。
killall inetd
inetd
再执行命令:
telnet localhost hi
执行结果如下:
Truing 127.0.0.1...
Connected to localhost.
Escape character is \^)\.
hi!
现在连接成功,但这只是一个简单的,只显示字符“hi!”的信息。
Internet超级服务器(三)
示例
//------inte.c---------
#include
#include
#include
char *cmps[] ={\"ls\", \"exit\", NULL};
int strcmps (char *cmp)
{ int n = 0;
while (cmps[n] != NULL)
{
if (strncasecmp (cmp, cmps[n], strlen (cmps[n])) == 0)
return n;
n++;
}
return -1;
}
main (void)
{
char buf[1024];
int ok = 0;
printf (\"Welcome to XuGuo~s home. \");
do
{
printf (\"Welcome>\");
fflush(stdout);
while (fgets (buf, 1023, stdin) == NULL);
switch (strcmps (buf)){
case -1:
printf (\"Unknown command! \");
break;
case 0:
execl (\"/bin/ls\", \"ls\", \"--color\", NULL);
break;
case 1:
ok = 1;
printf(\"Bye \");
break;}
fflush (stdout);
}while (!ok);
发布人:netbull 来自:LinuxAid