自己编写一个服务器来告诉自己时间
本次测试是在Ubuntu14.0.4上面测试的,采用的虚拟机是VMware12.0。这个是我作为Linu学习者写的,所以难免会有许多问题,不成熟的地方望大神指教!首先给出运行结果示意图,大家感兴趣就去看看,因为是代码所以比较枯燥
下面给出服务器端的程序:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<time.h>
#include<string.h>
#define PORTNUM 13000
#define HOSTLEN 256
#define oops(msg) {perror(msg);exit(1);}
int main(int agc,char *agv[])
{
struct sockaddr_in saddr;
struct hostent *hp;
char hostname;
int sock_id,sock_fd;
FILE *sock_fp;
time_t thetime;
/*
*Step1:ask kernel for a socket
*/
sock_id=socket(PF_INET,SOCK_STREAM,0);
if(sock_id==-1)
{
oops("socket");
}
/*
*Step2: bind address to socket.Adress is host,port
*/
bzero((void*)&saddr,sizeof(saddr));
gethostname(hostname,HOSTLEN);
hp=gethostbyname(hostname);
bcopy((void*)hp->h_addr,(void*)&saddr,hp->h_length);
saddr.sin_port=htons(PORTNUM);
saddr.sin_family=AF_INET;
if(bind(sock_id,(struct sockaddr*)&saddr,sizeof(saddr))!=0)
{
oops("bind");
}
/*
*allow incoming calls with Qsize=1 on socket
*/
if(listen(sock_id,1)!=0)
{
oops("listen");
}
/*
* main loop:accept(),write(),close()
*/
while(1)
{
sock_fd=accept(sock_id,NULL,NULL);
printf("Wow!got a call!\n");
if(sock_fd==-1)
{
oops("accept");
}
sock_fp=fdopen(sock_fd,"w");
if(sock_fp==NULL)
{
oops("fdopen");
}
thetime=time(NULL);
fprintf(sock_fp,"The time here is...");
fprintf(sock_fp,"%s",ctime(&thetime));
fclose(sock_fp);
}
return 0;
}
下面是客户端的程序
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<string.h>
#include<unistd.h>
#define oops(meg) {perror(meg);exit(1);}
int main(int agc,char *agv[])
{
struct sockaddr_in servaddr;
struct hostent *hp;
int sock_id,sock_fd;
char message;
int messlen;
/*
*Step1: Get a socket
*/
sock_id=socket(AF_INET,SOCK_STREAM,0);
if(sock_id==-1)
{
oops("socket");
}
/*
Step2: connect the server
*/
bzero(&servaddr ,sizeof(servaddr));
hp=gethostbyname(agv);
if(hp==NULL)
{
oops(agv);
}
bcopy(hp->h_addr,(struct sockaddr *)&servaddr.sin_addr,hp->h_length);
servaddr.sin_port=htons(atoi(agv));
servaddr.sin_family=AF_INET;
if(connect(sock_id,(struct sockaddr*)&servaddr,sizeof(servaddr))!=0)
{
oops("connect");
}
/*
*Step3: transfer data form server
*/
messlen=read(sock_id,message,BUFSIZ);
if(messlen==-1)
{
oops("read");
}
if(write(1,message,messlen)!=messlen)
{
oops("write");
}
close(sock_id);
}
之后我会尽量写一个如何搭建vps的帖子,也算是自己的学习分享给大家! zhcj66 发表于 2019-2-13 14:15
软件也是刚刚接触,有没有相关写bat的资料
现在是不是java能实现的东西,python都可以搞定
这个我还真的不知道。但是java现在还是有很大的人群基数的。各有各的优点。但是我们老师说学python的话的是那种985类似的学生去做可能好找工作,一般的学校的学生学了可能不太好找工作 s02lk 发表于 2019-2-13 08:56
在windows上写一个bat,然后设置定时运行就可以了吧。
对于python我也是小白,我也就是c,c++,java懂一点 ...
软件也是刚刚接触,有没有相关写bat的资料
现在是不是java能实现的东西,python都可以搞定 大神,先膜拜了{:1_893:} 怒江指海 发表于 2019-2-12 11:20
大神,先膜拜了
我也是新手,大家相互学习,加油! 好帖子 谢谢分享! s02lk 发表于 2019-2-12 10:38
之后我会尽量写一个如何搭建vps的帖子,也算是自己的学习分享给大家!
问一下大神,windows server 能否实现客户端指定 硬盘文件夹的自动备份? 从服务端拿时间,不错 zhcj66 发表于 2019-2-12 11:59
问一下大神,windows server 能否实现客户端指定 硬盘文件夹的自动备份?
用软件自动备份的软件就可以啊 或者自己写批处理 定时执行 azusys 发表于 2019-2-12 16:03
用软件自动备份的软件就可以啊 或者自己写批处理 定时执行
有什么软件? 程序还不会,刚刚开始学习 python zhcj66 发表于 2019-2-13 08:18
有什么软件? 程序还不会,刚刚开始学习 python
在windows上写一个bat,然后设置定时运行就可以了吧。
对于python我也是小白,我也就是c,c++,java懂一点。加油,我同学学的python感觉很强!
页:
[1]
2