#include <iostream>
#include <string>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
#define PROTOPORT 13
#define QLEN 6
int visits = 0;
#define DAY_TIME_DEF_PORT 13
#define DAY_TIME_BUF_SIZE 64
#define DAY_TIME_DEF_COUNT 2
int main(int argc, char* argv[])
{
struct hostent* ptrh;
struct sockaddr_in servaddr;
struct sockaddr_in clientaddr;
SOCKET listenfd;
SOCKET clientfd;
int alen;//地址长度
//char buf[1000];
char buf[DAY_TIME_BUF_SIZE];
//int port;
int port = DAY_TIME_DEF_PORT;
char* time_str;
time_t now_time;
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
memset((char*)&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
if (argc > 1) {
port = atoi(argv[1]);
}
else {
port = PROTOPORT;
}
if (port > 0) {
servaddr.sin_port = htons((u_short)port);
}
else {
//fprintf(stderr, "bad portnumber %s\n", argv[1]);
//exit(1);
cout << "bad portnumber %s" << argv[1] << endl;
return 1;
}
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd == INVALID_SOCKET) {
//fprintf(stderr, "socket creation failed\n");
//exit(1);
cout << "socket creation failed" << WSAGetLastError() << endl;
return 1;
}
if (bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == SOCKET_ERROR) {
//fprintf(stderr, "bind failed\n");
//exit(1);
cout << "bind failed" << WSAGetLastError() << endl;
return 1;
}
/*开始监听*/
if (listen(listenfd, QLEN) == SOCKET_ERROR) {
//fprintf(stderr, "listen failed\n");
//exit(1);
cout << "listen failed" << WSAGetLastError() << endl;
return 1;
}
while (1) {
alen = sizeof(clientaddr);
if ((clientfd = accept(listenfd, (struct sockaddr*)&clientaddr, &alen)) == INVALID_SOCKET) {
//fprintf(stderr, "accept failed\n");
//exit(1);
cout << "accept failed" << WSAGetLastError() << endl;
return 1;
}
visits++;
cout << "当前已有" << visits << "个访问者," << "当前访问者的IP:" << inet_ntoa(clientaddr.sin_addr) << " POST: " << port << endl;
//printf(" [Daytime]recv: \"%s\" ,from : %s\r\n", recv_buf, inet_ntoa(clnt_addr.sin_addr));
time_t now_time = time(0); //获取当前系统的日期和时间。
char* time_str = ctime(&now_time);//将某个日期和时间转换为字符串。
sprintf(buf, "this server has been contacted %d time \n", visits);
send(clientfd, time_str, strlen(time_str), 0);
//sendto(serv_sock, time_str, strlen(time_str), 0, (struct sockaddr*)&clnt_addr, addr_len);
closesocket(clientfd);
}
WSACleanup();
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1. 设计一个Daytime服务器程序,该程序监听客户机的连接请求。如果有客户机与服务器建立连接,服务器就将当前的日期与时间发送给客户机。 2. 编写一个客户端程序,该程序的功能是向服务器发出连接请求,在连接成功后,接收服务器发送的日期与时间信息,并以字符串的形式将其显示出来。 Daytime协议由RFC 867定义,用于返回服务器当前日期和时间。Daytime服务器应用程序忽略客户机发送的任何数据,只是检查本地时钟,并用字符串的形式返回当前日期与时间,客户机可以对取得的这个字符串进行处理。 Daytime协议可用于企业服务器与某个时间标准同步,也可用于检查网络连通性和调试网络程序等工作。 Daytime协议一般用TCP的服务,在端口13监听,一旦有连接建立,就返回ASCII形式的日期和时间,在传送完后关闭连接。 相关的两个函数: time_t time(time_t *timer):获取当前系统的日期和时间。 char *ctime(const time_t *time);//将某个日期和时间转换为字符串。
资源推荐
资源详情
资源评论
收起资源包目录
firstwork.zip (14个子文件)
firstwork
客户端运行截图.png 23KB
ljsever1
ljsever1
ljsever1.vcxproj.user 168B
ljsever1.vcxproj 6KB
ljsever1.vcxproj.filters 970B
ljsever1.cpp 3KB
.vs
ljsever1
v17
.suo 28KB
ljsever1.sln 1KB
ljclient1
.vs
ljclient1
v17
.suo 28KB
ljclient1
ljclient1.vcxproj.filters 971B
ljclient1.vcxproj.user 168B
ljclient1.vcxproj 6KB
ljclient1.cpp 3KB
ljclient1.sln 1KB
服务器端运行截图.png 19KB
共 14 条
- 1
资源评论
ADoubleLiu
- 粉丝: 58
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功