c标准库函数练习(网络)

上传人:第*** 文档编号:34063143 上传时间:2018-02-20 格式:DOC 页数:15 大小:356KB
返回 下载 相关 举报
c标准库函数练习(网络)_第1页
第1页 / 共15页
c标准库函数练习(网络)_第2页
第2页 / 共15页
c标准库函数练习(网络)_第3页
第3页 / 共15页
c标准库函数练习(网络)_第4页
第4页 / 共15页
c标准库函数练习(网络)_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《c标准库函数练习(网络)》由会员分享,可在线阅读,更多相关《c标准库函数练习(网络)(15页珍藏版)》请在金锄头文库上搜索。

1、移动互联网 C 语言标准库练习 培训系列1C 语言标准库练习移动互联网第一开发部2009-05-25移动互联网 C 语言标准库练习 培训系列2第 1 章 前言1. 使用 C 语言函数库的方法: 需要关注:函数的功能,入口参数(类型,个数) ,函数的返回值 (正确返回值,错误返回值),有时还需要关注错误码值的含义; 需要了解:函数声明所在的头文件,功能类似的相关函数; 必须写测试函数进行熟悉其用法,以及对返回值的判断; 最重要的是验证此函数满足你的需求;2. 本文档主要介绍进程间通讯(IPC) 的基础知识,需要各位在平时搜集资料并多编程了解: 何谓进程或者线程,如何才能实现多进程; 进程间通讯常

2、用的“介质”或者常用的方式有哪些; 进程间是如何利用“介质”进行通讯的; 进程间通讯“介质”(通讯方式 )常用的属性或者特质有哪些; 什么是守护进程或者精灵进程,它们是如何实现的; (有待补充)3. 本题库主要是以 socket 相关题目为主,其它各章节为辅,并辅以 snoop 抓包练习的路线,主要在 socket 相关题目中逐渐运用其它技术 (如:多进程,信号等知识 ),并熟练运用;snoop 抓包需要了解其使用方法,并能够熟练分析所抓包的各个字段含义等;4. (有待补充 )第 2 章 Socket 相关推荐书籍或资料:(资料的具体路径在:10.10.12.126新员工培训电子书)基础资料:

3、Linux C 编程一站式学习Linux 操作系统下 C 语言编程入门移动互联网 C 语言标准库练习 培训系列3snoop命 令 学 习 与 使用 手 册 .doc(有待补充)参考书籍:Linux C 函数库详解词典UNIX 网络编程(1,2 卷)UNIX 环境高级编程SunSolaris 多线程编程指南(有待补充)2.1 基础篇2.1.1 服务端程序例子/*gcc -o samp_server samp_server.c -lsocket -lnsl*/#include #include #include #include #include #include #include #includ

4、e #define MYPROT 3490 /*服务器监听端口号*/#define BACKLOG 10 /*最大同时连接请求数*/int main()int sockfd, new_fd; /*监听 socket: sockfd, 数据传输 socket: new_fd*/移动互联网 C 语言标准库练习 培训系列4struct sockaddr_in serv_addr; /*本机地址信息*/struct sockaddr_in clnt_addr; /*客户地址信息*/int sin_size = 0;int pid = 0;int stat = 0;static unsigned int

5、 count;char* sd_str = Hello, MID is a best department of Neusoft!;/*建立网际字节流套接字 */sockfd = socket(AF_INET, SOCK_STREAM, 0);if ( -1 = sockfd ) /*错误检测*/perror(socketn);exit(1);/*设置 socket 相关信息*/serv_addr.sin_family = AF_INET; /*置地址族为 AF_INET*/serv_addr.sin_port = htons(MYPROT); /*如果等于 0 则随机选择一个端口*/serv

6、_addr.sin_addr.s_addr = INADDR_ANY; /*系统填入本机 IP 地址*/bzero( /*初始化 serv_addr.sin_zero 为 0*/*绑定端口*/stat = bind(sockfd,(struct sockaddr *)if ( -1 = stat) /*错误检测*/perror(bindn );exit(1);/*监听端口*/stat = listen(sockfd, BACKLOG);if (-1 = stat) /*错误检测*/perror(listenn);exit(1);/*main accept() loop*/while(1)pri

7、ntf(server%u: Waitting%u .n,getpid(), +count);sin_size = sizeof(struct sockaddr_in);/*接受连接请求 ,并且建立一个新的 Socket 描述符*/new_fd = accept(sockfd,(struct sockaddr *)if ( -1 = new_fd )perror(acceptn);continue;printf(server:got connection form %s, sockfd%un,inet_ntoa(clnt_addr.sin_addr), new_fd);移动互联网 C 语言标准库

8、练习 培训系列5/*子进程代码段 */pid = fork();if ( pid #include #include #include #include #include #include #include #define PORT 3490#define MAXDATASIZE 100 /*每次最大数据传输量*/int main(int argc, char *argv)int sockfd,numbytes;char bufMAXDATASIZE;struct hostent *he;struct sockaddr_in clnt_addr;移动互联网 C 语言标准库练习 培训系列6int

9、 stat = 0;if (argc != 2)fprintf(stderr,usage: client hostnamen);exit(1);he = gethostbyname(argv1);if ( (he = NULL )perror(gethostbyname);exit(1);/*建立网际字节流套接字 */sockfd = socket(AF_INET, SOCK_STREAM, 0);if ( sockfd = -1 )perror(socketn);exit(1);/*设置 socket 相关信息*/clnt_addr.sin_family = AF_INET;clnt_add

10、r.sin_port = htons(PORT);clnt_addr.sin_addr = *(struct in_addr *)he-h_addr);bzero(/*建立连接*/stat = connect(sockfd, (struct sockaddr *)&clnt_addr,sizeof(struct sockaddr);if (-1 = stat)perror(connect);exit(1);/*接收消息*/numbytes = recv(sockfd, buf, MAXDATASIZE, 0);if ( numbytes = -1 )perror(recv);exit(1);b

11、ufnumbytes = 0;printf(Received: %sn,buf);close(sockfd);return 0;移动互联网 C 语言标准库练习 培训系列72.1.3 练习题1. 编写时间服务器程序(sample_tm_server)( 提供的时间格式:”YYYY/MM/DD HH:MM:SS”,例如:2009/04/09 04:58:05)。目的:a) 熟悉 C/S 架构;b) 能够使用 time 系列库函数,完成指定格式的日志输出;2. 鹦鹉学舌(multi_parrot):比喻人家怎么说,他也跟着怎么说。这是一个多么有趣的事情啊,我们可不可以完成这样一对“冤家”(parro

12、tc.c 和 parrots.c)呢,如图 1 所示,在 PC 向服务器发送一条 Msg 后,服务器会给 PC 返回一条相同的 Msg。要求:a) 监听端口的灵活性:服务端监听的端口通过入口参数传入;b) 用户输入的友好性:用户可以通过客户端输入 Msg;c) 程序良好的容错性:用户可以根据不同的错误码或错误信息定位错误点;d) 程序退出的优雅性:程序可以优雅的退出;图 1:鹦鹉学舌图移动互联网 C 语言标准库练习 培训系列83. 在“鹦鹉学舌”的基础上,试编写一个“智能机器人”(sample_robot) :它能够根据不同的“问” ,给出对应的“答” (比如:客户端发送“你好” ,此机器人会

13、返回“你好” ;“Nice to meet you” -“Nice to meet you too.”等等)。4. 测试程序需要自己编写完成;5. 编写一个简单的信息服务器(sample_info_server),它能够存储客户端发来的用户信息;用户信息至少包括(身份证号码,姓名,年龄,学历,工作年限,工资,手机号码,公司名称,公司地址等) 。6. 功能:具有增,删,改,查找即可,其余不限;7. 测试程序需要自己编写完成;8. 想做一个 hacker 吗?试着编写一个程序(samp_hacker.c),能够查看其它机器指定目录下的文件名字。图 2:samp_hacker客户端测试程序需要自己完

14、成;移动互联网 C 语言标准库练习 培训系列92.2 进阶篇1. 如果 sample_robot 程序( 包括客户端和服务端),在以下步骤中使用命令: netstat -na |grep serv-port(服务端监听端口),看看会有什么不同,尝试查找资料理解并相互讲解。a) 在服务端启动后;b) 在客户端成功登陆后;c) 在对话过程中;d) 在客户端主动断连后;e) 在服务端主动断连后;f) 在 e 步骤之后,停掉客户端之后;2. “休眠服务器(Dorm_Serv)”(dormancy_serv.c),创建一个“休眠”服务器,使他具有以下功能:a) 用户能够通过网络向 Dorm_Serv 发

15、出一个休眠指令;b) Dorm_Serv 在接收到指令后,能够进入休眠状态;c) Dorm_Serv 休眠用户指定的时间后,会向用户发出一个醒来的提示信息;客户端测试程序需要自己完成;3. 根据 samp_hacker 程序,尝试编写一个”远程控制(Rmte_Cntl)”程序(remote_control.c),其功能如下:a) 能够根据用户从网络发来的指令 commands 进行相应的操作;b) 能够将指令执行后的结果从网络返回给用户;客户端测试程序需要自己完成;4. “半双工聊天器(HDCQ)”(half_duplex_chat.c)。创建一个简单的半双工聊天程序。“半双工”的意思是指当创建一个连接,服务启动时,只有一个人可以打字,另一个人只有在等到消息通知它输入消息时,才能打字,一旦消息发出去后,需要等到回复才能发送下一条消息,一个人是服务端,一个人是客户端(有点类似于对讲机)。5. 学习“IO 的阻塞和非阻塞”相关知识,采用非阻塞 IO 技术修改 HDCQ 程序。 6. 学习“I/O 多路复用(select)”,并使用此技术完成一个可以为多个客户提供时间的时间服务器程序(io_multi_tm_server),约束条件如 sample_tm_server;7. 学习”I/O 多路复用(poll)”,并使用此技术完成一个服务器,其功能如下:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号