lvxuzhou


私信TA

用户名:lvxuzhou

访问量:97346

签 名:

lvxuzhou

等  级
排  名 48
经  验 11191
参赛次数 0
文章发表 56
年  龄 0
在职情况 学生
学  校 西安
专  业

  自我简介:

公共代码:

#pragma once
#include<stdio.h>
#include<stdint.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<time.h>
#include<stdbool.h>
#define SERVERPORT 1989

#define FTM_STAMP "%lld\r\n"

#define lv_exit(str)\
        perror(str);\
        exit(1);

服务器代码:

#include"proto.h"
static void serverjob(int confd){
    char buf[512]={0};
    int len=sprintf(buf,FTM_STAMP,(long long)time(NULL));
    if(send(confd,buf,len,0)<0){
        perror("send");
        exit(1);
    }   
}
int main(int argc, char const *argv[])
{
    int sfd=socket(AF_INET,SOCK_STREAM,0);
    if(sfd<0){
        perror("socket");
        exit(1);
    }
    struct sockaddr_in seraddr;
    seraddr.sin_family=AF_INET;
    seraddr.sin_port=htons(SERVERPORT);
    seraddr.sin_addr.s_addr=inet_addr("192.168.244.154");
    int val=1;
    
    if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&val,sizeof val)<0){
        perror("setsockopt");
        exit(1);
    }
    if(bind(sfd,(void*)&seraddr,sizeof seraddr)<0){
        perror("bind");
        exit(1);
    }
    if(listen(sfd,10)<0){
        perror("listen");
        exit(1);
    }
    struct sockaddr_in cliaddr;
    socklen_t clilen=sizeof cliaddr;
    while (1)
    {
        int confd=accept(sfd,(void*)&cliaddr,&clilen);
        if(confd<0){
            perror("accept");
            exit(1);
        }
        printf("client %s %d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
        serverjob(confd);
        close(confd);
    }
    
    
    close(sfd);
    return 0;
}

客户端代码:

#include"proto.h"
int main(int argc, char const *argv[])
{
    int sfd=socket(AF_INET,SOCK_STREAM,0);
    if(sfd<0){
        perror("socket");
        exit(1);
    }
    struct sockaddr_in seraddr;
    seraddr.sin_family=AF_INET;
    seraddr.sin_port=htons(SERVERPORT);
    seraddr.sin_addr.s_addr=inet_addr("192.168.244.154");
    if(connect(sfd,(void*)&seraddr,sizeof seraddr)<0){
        perror("connect");
        exit(1);
    }
    FILE* fp= fdopen(sfd,"r+");
    if (fp==NULL)
    {
        perror("fdopen");
        exit(1);
    }
    long long stamp;
    if(fscanf(fp,FTM_STAMP,&stamp)<1){
        fprintf(stderr,"Bad format!\n");
    }else
    {
        fprintf(stdout,"stamp=%lld\n",stamp);
    }
    fclose(fp);
    return 0;
}

测试结果:

QQ图片20211026231104.png

QQ图片20211026231104.png

 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区