客户请求包含'daytime',服务器返回当前时间
来源:互联网 发布:农产品出口数据 编辑:程序博客网 时间:2024/05/21 05:24
/* Linux File Name: server.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <time.h> #define DEFAULT_PORT 8000 #define MAXLINE 4096 char *getTime(); //声明获得当前时间的函数,返回一个当前时间的数组 int main(int argc, char** argv) { int socket_fd, connect_fd; struct sockaddr_in servaddr; char buff[4096], tim[255]; int n; //初始化Socket if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } //初始化 memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。 servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT //将本地地址绑定到所创建的套接字上 if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } //开始监听是否有客户端连接 if( listen(socket_fd, 10) == -1){ printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("======waiting for client's request======\n"); while(1){ //阻塞直到有客户端连接,不然多浪费CPU资源。 if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){ printf("accept socket error: %s(errno: %d)",strerror(errno),errno); continue; } //接受客户端传过来的数据 n = recv(connect_fd, buff, MAXLINE, 0); buff[n] = '\0'; printf("recv msg from client: %s\n", buff); if(strstr(buff,"daytime") != NULL){ //判断是否含有daytime子串 strcpy(tim,getTime()); //调用函数获得当前时间 printf("contain substring 'daytime'\n"); } else{ strcpy(tim,"NULL"); printf("Don't contain substring 'daytime'\n"); } //向客户端发送回应数据 if(send(connect_fd, tim, 26,0) == -1) perror("send error"); close(connect_fd); } close(socket_fd); } char *getTime(){ time_t t = time(0); static char s[255]; strftime(s,255,"%Y-%m-%d %H:%M:%S",localtime(&t)); return s; }
/*Linux File Name: client.c */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define MAXLINE 4096 int main(int argc, char** argv) { int sockfd, n,rec_len,choose = 1; char recvline[4096], sendline[4096]; char buf[MAXLINE]; struct sockaddr_in servaddr; //判断是否添加ip if( argc != 2){ printf("usage: ./client <ipaddress>\n"); exit(0); } while(1){ //初始化Socket if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ printf("create socket error: %s(errno: %d)\n", strerror(errno),errno); exit(0); } //初始化 memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(8000); if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ printf("inet_pton error for %s\n",argv[1]); exit(0); } //连接失败 if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){ printf("connect error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("send msg to server: "); fgets(sendline, 4096, stdin); if( send(sockfd, sendline, strlen(sendline), 0) < 0) { printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); exit(0); } if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) { perror("recv error"); exit(1); } buf[rec_len] = '\0'; printf("Received :%s\n",buf); } close(sockfd); exit(0); }
//Windows File Name:server.c #include <stdio.h>#include <winsock2.h>#include <string.h>#include <time.h>#pragma comment(lib,"ws2_32.lib")char *getTime();//申明一个getTime函数,返回一个当前时间的数组int main(void){ //初始化wsa WORD sockVision = MAKEWORD(2,2); WSADATA wsadata; //其他变量 SOCKET slisten; SOCKET sClient; struct sockaddr_in remoteAddr; struct sockaddr_in sin; int ret = -1; int nAddrlen = sizeof(remoteAddr); char revdata[255]; char senddata[255]; if( WSAStartup(sockVision,&wsadata) != 0 ) { printf("WSA初始化失败\n"); return 0; } //创建套接字 slisten = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(slisten == INVALID_SOCKET) { printf("socket监听者创建失败\n"); return 0; } //绑定IP和端口 sin.sin_family = AF_INET; sin.sin_port = htons(8888); sin.sin_addr.S_un.S_addr = INADDR_ANY; if( bind(slisten,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR ) { printf("绑定IP和端口\n"); return 0; } //监听 if(listen(slisten,5) == SOCKET_ERROR) { printf("监听失败\n"); return 0; } //循环接收数据 while(1) { printf("等待连接.........\n"); sClient = accept(slisten,(SOCKADDR *)&remoteAddr,&nAddrlen); if(sClient == INVALID_SOCKET) { printf("接受客户端失败,正在重试.........\n"); continue; } printf("接受客户端成功:%s\n",inet_ntoa(remoteAddr.sin_addr)); //接收数据 while(1) { ret = recv(sClient,revdata,255,0); if(ret > 0) { revdata[ret] = 0x00; printf("\n"); printf("客户:"); printf(revdata); printf("\n"); } if(strstr(revdata,"daytime") != NULL){strcpy(senddata,getTime()); //调用函数获得当前时间printf("包含'daytime'子串\n");} else{strcpy(senddata,"NULL");printf("不包含'daytime'子串\n");} //发送数据 send(sClient,senddata,strlen(senddata),0); } closesocket(sClient); } closesocket(sClient); WSACleanup(); return 0;}char *getTime(){ time_t t = time(0); static char s[255]; strftime(s,255,"%Y-%m-%d %H:%M:%S",localtime(&t)); return s; }
//Windows File Name:client.c#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")int main(void){ WORD sockVision = MAKEWORD(2,2); WSADATA wsadata; SOCKET sclient ; struct sockaddr_in serAddr; char senddata[255]; char revdata[255]; int ret = -1; if(WSAStartup(sockVision,&wsadata) != 0) { printf("WSA初始化失败\n"); return 0; } sclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sclient == INVALID_SOCKET) { printf("socket客户端创建失败\n"); return 0; } serAddr.sin_family = AF_INET; serAddr.sin_port = htons(8888); serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); if( connect(sclient,(SOCKADDR *)&serAddr,sizeof(serAddr)) == SOCKET_ERROR ) { printf("socket客户端连接失败\n"); return 0; } while(1) { printf("我:"); scanf("%s",senddata); send(sclient,senddata,strlen(senddata),0); if(strcmp(senddata,"bye") == 0) break; ret = recv(sclient,revdata,255,0); if(ret > 0) { revdata[ret] = 0x00; printf("\n"); printf("服务器:"); printf(revdata); printf("\n"); } } closesocket(sclient); WSACleanup(); system("pause"); return 0;}
阅读全文
1 0
- 客户请求包含'daytime',服务器返回当前时间
- Daytime服务器
- 1.通过tcp从daytime服务器获取时间
- CentOS开启daytime服务器
- 返回当前时间函数
- 返回当前时间日期
- 返回当前时间戳
- daytime协议和时间协议
- 服务器请求返回数
- daytime服务器与客户端(程序)
- 当前服务器时间代码
- daytime
- 服务器如何响应Web客户请求?
- JS请求服务器时间
- 时间获取的客户和服务器程序
- 服务器请求返回 500错误
- js获取服务器当前时间
- AJAX获取服务器当前时间
- linxu-02
- 实验7 将menu设计为可重用的子系统
- Java学习笔记(3): 对象封装
- hihocoder #1619 : “共同富裕”
- linxu-03
- 客户请求包含'daytime',服务器返回当前时间
- java中的synchronized(同步代码块和同步方法的区别)
- 使用VS的终端工具调试时,添加参数调试方法
- linxu-04
- 易买网之分页显示对应当前页扥所有的商品1
- SpringCloud微服务系列笔记(0)-笔记说明
- linxu-05
- linxu-06
- 为什么生活这么难