zoukankan      html  css  js  c++  java
  • socket测试3

    socket测试-3

    基于socket 实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
    服务器响应消息格式是

    客户端IP:XXXX
    服务器实现者学号:XXXXXXXX
    当前时间: XX:XX:XX

    上方提交代码
    提交一个客户端至少查询三次时间的截图测试截图
    提交至少两个客户端查询时间的截图测试截图

    代码

    点击查看代码
    #include "csapp.h"
    
    int main(int argc, char **argv) 
    {
        int clientfd, port;
        char *host, buf[MAXLINE];
        rio_t rio;
        if (argc != 3) 
        {
            fprintf(stderr, "usage: %s <host> <port>\n", argv[0]);
            exit(0);
        }
        host = argv[1];
        port = atoi(argv[2]);
        clientfd = Open_clientfd(host, port);
        Rio_readinitb(&rio, clientfd);
        while (Fgets(buf, MAXLINE, stdin) != NULL) 
        {
            time_t t;
            struct tm * lt;
            size_t n; 
            printf("\n客户端IP:127.0.0.1\n");
            printf("服务器实现者学号:20191315\n");
            time (&t);
            lt = localtime (&t);
            printf ("当前时间为:%d/%d/%d %d:%d:%d\n",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);
            Rio_writen(clientfd, buf, strlen(buf));
            Rio_readlineb(&rio, buf, MAXLINE);
            Fputs(buf, stdout);
        }
        Close(clientfd); 
        exit(0);
    }#include "csapp.h"
    
    int main(int argc, char **argv) 
    {
        int clientfd, port;
        char *host, buf[MAXLINE];
        rio_t rio;
        if (argc != 3) 
        {
            fprintf(stderr, "usage: %s <host> <port>\n", argv[0]);
            exit(0);
        }
        host = argv[1];
        port = atoi(argv[2]);
        clientfd = Open_clientfd(host, port);
        Rio_readinitb(&rio, clientfd);
        while (Fgets(buf, MAXLINE, stdin) != NULL) 
        {
            time_t t;
            struct tm * lt;
            size_t n; 
            printf("\n客户端IP:127.0.0.1\n");
            printf("服务器实现者学号:20191315\n");
            time (&t);
            lt = localtime (&t);
            printf ("当前时间为:%d/%d/%d %d:%d:%d\n",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);
            Rio_writen(clientfd, buf, strlen(buf));
            Rio_readlineb(&rio, buf, MAXLINE);
            Fputs(buf, stdout);
        }
        Close(clientfd); 
        exit(0);
    }
    
    点击查看代码
    #include "csapp.h"
    
    void echo(int connfd) 
    {
        size_t n; 
        char buf[MAXLINE]; 
        rio_t rio;
        Rio_readinitb(&rio, connfd);
        while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) 
        {
            printf("server received %d bytes\n", n);
            Rio_writen(connfd, buf, n);
        }
    }
    
    void sigchld_handler(int sig) 
    {
        while (waitpid(-1, 0, WNOHANG) > 0);
        return;
    }
    
    int main(int argc, char **argv) 
    {
        int listenfd, connfd, port, clientlen=sizeof(struct sockaddr_in);
        struct sockaddr_in clientaddr;
        if (argc != 2) 
        {
            fprintf(stderr, "usage: %s <port>\n", argv[0]);
            exit(0);
        }
        port = atoi(argv[1]);
        Signal(SIGCHLD, sigchld_handler);
        listenfd = Open_listenfd(port);
        while (1) {
        connfd = Accept(listenfd, (SA *) &clientaddr, &clientlen);
        if (Fork() == 0) 
        { 
            Close(listenfd); 
            echo(connfd); 
            Close(connfd); 
            exit(0);
        }
        Close(connfd); 
        }
    }
    

    截图

  • 相关阅读:
    microsoft.extensions.logging日志组件拓展(保存文本文件)
    Winform 窗体皮肤美化_IrisSkin
    MailKit/MimeKit 发送邮件
    Winform 美化
    HTML CSS布局定位
    Newtonsoft.Json使用技巧
    Javascript 日历插件
    非靜態初始化塊與夠着函數的 執行順序
    java中堆栈的功能作用 以及區別(搜集)
    Java中数据类型相互转化
  • 原文地址:https://www.cnblogs.com/harperhjl/p/15710173.html
Copyright © 2011-2022 走看看