转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> MySql >> 正文
Linux程式设计入门 - socket/inetd programming         ★★★★

Linux程式设计入门 - socket/inetd programming

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2498 更新时间:2009/4/22 20:47:25
printf("Can not listen!\n");

return 0;

}

 

return 1;

}

 

Incoming call

 

要查看是否有连线进来,可用以下方式:

int incoming_call(void)

{

fd_set sock;

struct timeval tv;

int t;

 

FD_ZERO(&sock);

FD_SET(DaemonpSignal();

if (!BindSocket()) {

printf("Can not bind socket!\n");

exit(1);

}

WriteLock();

}

 

printf("Chess Daemon is up, have fun!\n");

 

now = time(NULL);

dlog("----------------------------------------------\n");

dlog(

"I am back! %s"

"Chess Daemon comes to alive again.\n",

asctime((const struct tm*)localtime(&now))

);

 

do {

if (incoming_call()) {

if (ConnectClient()) {

 

fd_set sock;

struct timeval tv;

int t;

char BUF[128];

char CC[2];

int n;

daemon_printf("Welcome to Chinese Chess Game Center!\n");

 

FD_ZERO(&sock);

FD_SET(ClientSocket,&sock);

n = 0;

do {

tv.tv_sec = 60; tv.tv_usec = 0;

t = select(ClientSocket+1,&sock,NULL,NULL,&tv);

if (t<=0||!FD_ISSET(ClientSocket,&sock)) ;

read(ClientSocket,CC,1);

if (CC[0]==13||CC[0]==10||CC[0]==0) {

BUF[n] = 0;

dlog("%s\n",BUF);

if (strncasecmp(BUF,"exit",4)==0) {

close(ClientSocket);

break;

}

n = 0;

} else {

BUF[n]=CC[0]; n++;

}

} while (1);

}

}

} while (1);

 

return 1;

}

 

检验

 

telnet localhost 9901

 

 

 

在处理Connect Client时,事实上可以运用forkthread来处理多个连线。

 

 

inetd programming

 

利用inetd来做网路程式设计是个既简单又稳定的设计方法,您不需要考虑到复

杂的socket programming。您的设计工作几乎在设计好通讯协定後就完成了,

所需要的技巧,仅为简单的文字分析技巧。

 

goodie inet service

 

首先,我们先来撰写一个称为goodie的服务程式。

goodie.c

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

 

void main(void)

{

printf("Welcome to goodie service!\n");

}

 

这个程式很简单,不是吗?

 

编译

 

gcc -o goodie goodie.c

 

设定/etc/services/etc/inetd.conf

 

/etc/services中加入以下这一行

 

goodie 20001/tcp

其意义为goodie这项服务是在port 20001TCP协定。

 

接下来在/etc/inetd.conf中加入以下这一行

 

goodie stream tcp nowait root /full_goodie_path_name/goodie

 

各项叁数的意义为

<service_name> <sock_type> <proto> <flags> <user> <server_path>

<args>

 

service_name需要为在services中存在的名称。

sock_type有很多种,大多用的是stream/dgram

proto一般用tcp/udp

flagswait/nowait

user是您指定该程式要以那一个使用者来启动,这个例子中用的是root,如果

有安全性的考量,应该要改用nobody。一般来说,建议您用低权限的使用者,

除非必要,不开放root使用权。

server_pathargs,这是您的服务程式的位置及您所想加入的叁数。

 

接下来重新启动inetd

 

killall inetd

inetd

 

这样我们便建立起一个port 20001good

上一页  [1] [2] [3]  下一页


[VB.NET程序]几个 WMI 的例子(初级) - 1  [VB.NET程序]几个 WMI 的例子(初级) - 2
[VB.NET程序]几个 WMI 的例子(初级) - 3  [VB.NET程序]几个 WMI 的例子(初级) - 4
[Delphi程序][Tips]挂起 - 运行外部程式,外部程式退出 - 继续…  [Delphi程序]升级到Delphi 6 - 兼容性问题(中文全文)
[Delphi程序]升级到Delphi 6 - 兼容性问题之三(完)  [Delphi程序]升级到Delphi 6 - 兼容性问题之二
[Delphi程序]升级到Delphi 6 - 兼容性问题之一  [Delphi程序]2001 年軟體界的巨星 - Kylix:李维.
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台