s02lk 发表于 2019-2-12 10:36

自己编写一个服务器来告诉自己时间

本次测试是在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);

}

s02lk 发表于 2019-2-12 10:38

之后我会尽量写一个如何搭建vps的帖子,也算是自己的学习分享给大家!

s02lk 发表于 2019-2-13 16:23

zhcj66 发表于 2019-2-13 14:15
软件也是刚刚接触,有没有相关写bat的资料
现在是不是java能实现的东西,python都可以搞定

这个我还真的不知道。但是java现在还是有很大的人群基数的。各有各的优点。但是我们老师说学python的话的是那种985类似的学生去做可能好找工作,一般的学校的学生学了可能不太好找工作

zhcj66 发表于 2019-2-13 14:15

s02lk 发表于 2019-2-13 08:56
在windows上写一个bat,然后设置定时运行就可以了吧。
对于python我也是小白,我也就是c,c++,java懂一点 ...

软件也是刚刚接触,有没有相关写bat的资料
现在是不是java能实现的东西,python都可以搞定

怒江指海 发表于 2019-2-12 11:20

大神,先膜拜了{:1_893:}

s02lk 发表于 2019-2-12 11:54

怒江指海 发表于 2019-2-12 11:20
大神,先膜拜了

我也是新手,大家相互学习,加油!

jun57663796 发表于 2019-2-12 11:55

好帖子 谢谢分享!

zhcj66 发表于 2019-2-12 11:59

s02lk 发表于 2019-2-12 10:38
之后我会尽量写一个如何搭建vps的帖子,也算是自己的学习分享给大家!

问一下大神,windows server 能否实现客户端指定 硬盘文件夹的自动备份?

jimo 发表于 2019-2-12 12:02

从服务端拿时间,不错

azusys 发表于 2019-2-12 16:03

zhcj66 发表于 2019-2-12 11:59
问一下大神,windows server 能否实现客户端指定 硬盘文件夹的自动备份?

用软件自动备份的软件就可以啊 或者自己写批处理 定时执行

zhcj66 发表于 2019-2-13 08:18

azusys 发表于 2019-2-12 16:03
用软件自动备份的软件就可以啊 或者自己写批处理 定时执行

有什么软件? 程序还不会,刚刚开始学习 python

s02lk 发表于 2019-2-13 08:56

zhcj66 发表于 2019-2-13 08:18
有什么软件? 程序还不会,刚刚开始学习 python

在windows上写一个bat,然后设置定时运行就可以了吧。
对于python我也是小白,我也就是c,c++,java懂一点。加油,我同学学的python感觉很强!
页: [1] 2
查看完整版本: 自己编写一个服务器来告诉自己时间