网络编程--C/S日期查询例子
2013-04-24 18:18
218 查看
日期查询服务器--把当前日期和时间以ASCII格式通过套接字发送给客户端。
#include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <time.h> #include <string.h> #include <unistd.h> /* MAX_BUFFER为最大缓冲区容量 */ #define MAX_BUFFER 128 /* 套接字使用的端口号 */ #define DAYTIME_SERVER_PORT 13 int main() { /* 两个套接字描述符 */ int serverFd, connectionFd; /* 套接字地址结构体 */ struct sockaddr_in servaddr; /* 暂时保存时间字符串所需的缓冲区 */ char timebuffer[MAX_BUFFER+1]; /* 用来描述时间的结构体 */ time_t currentTime; /* 第一步使用socket函数创建套接字,其中AF_INET指明要创建一个IP套接字,SOCK_STREAM表明使用高可靠性的流协议,0表示默认的流类型协议即TCP协议 */ serverFd = socket(AF_INET, SOCK_STREAM, 0); /* 初始化地址结构,并将其元素设置为零 */ memset(&servaddr, 0, sizeof(servaddr)); /* 再次用AF_INET指明位IPv4套接字 */ servaddr.sin_family = AF_INET; /* s_addr指定一个地址,这里是套接字建立连接后接受输入的地址。INADDR_ANY指明接受来自主机的任何可用接口的连接 */ /* 这里右端也可以用inet_addr(INADDR_ANY) */ servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* 定义将要使用的端口 */ servaddr.sin_port = htons(DAYTIME_SERVER_PORT); /*其中,htonl()和htons()进行字节顺序转换保证提交到网络的包中字节是正确的 */ /* 把前面创建的地址结构体和套接字绑定 */ bind(serverFd, (struct sockaddr *)&servaddr, sizeof(servaddr)); /* 必须调用listen函数,客户端才能够连接到这个套接字。这个函数告诉协议栈已经准备好接受连接,参数5指定等待连接的客户队列中最多有5个客户 */ listen(serverFd, 5); /* 接受客户端连接并提供当前时间 */ while(1) { /* 对套接字serverFd调用accept函数,以同意建立新的客户连接 */ connectionFd = accept(serverFd, (struct sockaddr *)NULL, NULL); /* 当一个客户连接到服务器的时候, 网络栈会创建一个描述连接终点的新的套接字,并有accept返回此套接字*/ if(connectionFd >= 0) { /* time()函数获取当前时间,从1970.1.1开始的总秒数 */ currentTime = time(NULL); /* ctime()将时间转换成可阅读的形式 */ snprintf(timebuffer, MAX_BUFFER, "%s\n", ctime(¤tTime)); /*使用write函数通过connectionFd套接字把这个回应字符串发送到相应的客户端 */ write(connectionFd, timebuffer, strlen(timebuffer)); /* 关闭客户套接字,结束通信 */ close(connectionFd); } } }日期查询客户端
#include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <time.h> #define MAX_BUFFER 128 #define DAYTIME_SERVER_PORT 13 int main() { int connectionFd, in , index = 0, limit = MAX_BUFFER; struct sockaddr_in servaddr; char timebuffer[MAX_BUFFER+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("127.0.0.1"); connect(connectionFd, (struct sockaddr *)&servaddr, sizeof(servaddr)); while((in = read(connectionFd, &timebuffer[index], limit)) > 0) { index += in; limit -= in; } timebuffer[index] = 0; printf("\n%s\n", timebuffer); close(connectionFd); return 0; }
相关文章推荐
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
- java网络编程----例子
- Python网络编程小例子:使用python获取网站域名信息
- Poco库网络模块例子解析1-------字典查询
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列
- [转]Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Python网络编程例子
- Python网络编程:接口地址查询
- [转]Linux下Socket网络编程,文件传输,数据传输的C语言例子
- iOS网络编程-ASIHTTPRequest小例子-数据请求队列
- mybatis的日期查询与字段的模糊查询例子
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
- java网络编程实现客户端连接服务器端,并发送消息例子(1)。(阻塞式的方法)
- python网络编程之TCP通信实例和socketserver框架使用例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- python网络编程小例子
- Java网络编程之UDP通信例子
- abap编程的一些例子 查询
- Linux IO多路复用之epoll网络编程,高并发的使用例子 (含源码)
- libevent网络编程例子(1)