zoukankan      html  css  js  c++  java
  • 通信的数据格式

    先说结论

    一般分字符串形式和二进制形式两种. 由于大小端, 64/32位问题, 推荐使用字符串作为传输数据格式

    字符串方式

    主程序在[多线程的发送与接收]那一节
    主要修改就是服务端接收到数据后,将字符串转换成数字进行相加,然后发回给客户端

    void str_echo(int sockfd){
        long arg1,arg2;
        ssize_t n;
        char line[MAXLINE];
     
        for(;;){
            if((n=read(sockfd,line,MAXLINE)) == 0)
                return;
            if((sscanf(line,"%ld%ld",&arg1,&arg2)) == 2)
                snprintf(line,sizeof(line),"%ld
    ",arg1+arg2);
            else
                snprintf(line,sizeof(line),"input error");
     
            n=strlen(line);
            writen(sockfd,line,n);
        }
    }
    

    二进制方式

    先加个头文件sum.h, 服务端与客户端都使用同一格式的结构

    // sum.h
    struct args{
        long arg1;
        long arg2;
    };
     
    struct result{
        long sum;
    };
    

    客户端str_cli代码

    void str_cli(FILE *fp,int sockfd){
        char sendline[MAXLINE];
        struct args args;
        struct result result;
     
        while(Fgets(sendline,MAXLINE,fp) != NULL){
            if((sscanf(sendline,"%ld%ld",&args.arg1,&args.arg2)) != 2){
                printf("invalid input: %s",sendline);
                continue;
            }
            writen(sockfd,&args,sizeof(args));
            if((readn(sockfd,&result,sizeof(result))) == 0)
                err_quit("str_cli: server terminated permaturely");
            printf("%ld
    ",result.sum);
        }
    }
    

    服务端str_echo代码

    void str_echo(int sockfd){
        ssize_t n;
        struct args args;
        struct result result;
     
        for(;;){
            if((n=readn(sockfd,&args,sizeof(args))) == 0)
               return;
            result.sum=args.arg1+args.arg2;
            writen(sockfd,&result,sizeof(result));
        }
    }
    
  • 相关阅读:
    PHP发送邮件
    SQL删除字段及判断字段是否存在的方法
    密码MySQL的root的密码
    java socket 最简单的例子(server 多线程)
    php编写最简单的webservice
    SQL Server 存储过程与触发器
    手动创建最简单的JSP 文件
    Oracle 卸载步骤
    编写 WebService 程序
    eclipse 常用快捷键
  • 原文地址:https://www.cnblogs.com/cfans1993/p/5883379.html
Copyright © 2011-2022 走看看