迭代服务器编程
来源:互联网 发布:在职软件工程硕士2017 编辑:程序博客网 时间:2024/04/29 06:25
下面代码实现的是典型的迭代服务器框架,服务器端功能是为客户端提供日期服务。
(1) 服务器端代码
dayserv.c源代码如下:
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <time.h>
#include <unistd.h>
#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 8001
int main ( void )
{
int serverFd, connectionFd;
struct sockaddr_in servaddr;
char timebuffer[MAX_BUFFER+1];
time_t currentTime;
serverFd = socket(AF_INET, SOCK_STREAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
bind(serverFd, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(serverFd, 5);
while ( 1 ) {
connectionFd = accept(serverFd, (struct sockaddr *)NULL, NULL);
if (connectionFd >= 0) {
currentTime = time(NULL);
snprintf(timebuffer, MAX_BUFFER, "%s\n", ctime(¤tTime));
write(connectionFd, timebuffer, strlen(timebuffer));
close(connectionFd);
}
}
return 0 ;
}
(2)客户端代码
daycli.c源代码如下:
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <time.h>
#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 8001
int main ( int argc, char *argv[] )
{
int connectionFd, in;
struct sockaddr_in servaddr;
char timebuffer[MAX_BUFFER+1];
if (argc != 2) {
fprintf(stderr, "Usage:./daycli IP\n") ;
return -1;
}
connectionFd = socket(AF_INET, SOCK_STREAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
servaddr.sin_addr.s_addr = inet_addr(argv[1]) ;
connect(connectionFd, (struct sockaddr *)&servaddr, sizeof(servaddr));
while ( (in = read(connectionFd, timebuffer, MAX_BUFFER)) > 0) {
timebuffer[in] = 0;
printf("\n%s", timebuffer);
}
close(connectionFd);
return 0;
}
(3)编译与执行
编译服务端代码 gcc dayserv.c -o dayserv。
编译客户端代码 gcc daycli.c -o daycli。
执行 ./dayserv &, ./daycli 127.0.0.1,执行结果如下:
Fri Jan 16 14:20:21 2009
摘录自《深入浅出Linux工具与编程》
- 迭代服务器编程
- python socket编程实现的简单tcp迭代服务器
- 一步一步学习Unix编程[2]——迭代服务器
- Linux网络编程——tcp、udp迭代服务器
- TCP迭代服务器
- 简单迭代服务器
- 流式套接字客户端/服务器编程 (迭代服务器+并发服务器)
- linux TCP 服务器编程(一):简单的迭代服务器
- UNIX网络编程卷1 服务器程序设计范式0 迭代服务器
- 迭代服务器与并发服务器
- Linux网络编程14——tcp、udp迭代服务器
- Linux网络编程11——tcp、udp迭代服务器
- Linux网络编程14——tcp、udp迭代服务器
- 初步认识迭代服务器和并发服务器
- 初步认识迭代服务器和并发服务器
- 初步认识迭代服务器和并发服务器
- 初步认识迭代服务器和并发服务器
- 初步认识迭代服务器和并发服务器
- 修改Firefox默认的缩放比例
- Log4j配置详解(转)
- vc中的基本数据类型及其转换
- Android的Window类
- SQL2005/2008中的CTE应用--递归查询
- 迭代服务器编程
- ServletContextListener介绍
- Ogre3D 图形引擎简介
- FLEX Builder compiler arguments 的设置
- 并发服务器编程
- 分页内存和非分页内存
- void及void指针详解
- Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?
- gcc编译多个函数文件的Makefile写法(单链表的插入和合并等功能)