zoukankan      html  css  js  c++  java
  • 回射服务器的客户端

    #include "unp.h"
    int main(int argc,char**argv){
    int sockfd;
    struct sockaddr_in servaddr;
    if(argc != 2)
    err_quit("usage:tcpcli<IPaddress>");
    sockfd = socket(AF_INET,SOCK_STREAM,0);
    //SOCK_STRREAM为TCP协议,通信协议类型
    bzero(&servaddr,sizeof(servaddr));
    //置零,指针所指的前几位
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(SERV_PORT);
    //将整数由主机字节顺序转变成网络字节顺序unp.h中为9877-->SERV_PORT
    inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
    //将点十进制的IP地址,转化为二进制的ip地址,赋给第三个参数的指针所指
    connect(sockfd,(SA*)&servaddr,sizeof(servaddr));
    //连接过程详解,没调用bind(),内核会为套接字选择一个端口
    //服务器调用Listen,accept(),
    //客户用connect()来连接服务器,&servaddr,中含有ip和port连接服务器
    //未bind()时,内核选定源ip和port
    //为tcp协议时,connect()激发了三次握手,成功或者出错才会返回一个值
    str_cli(stdin,sockfd);
    //stdin作为输入的文件指针,int sockfd作为文件标识符
    exit(0);
    }

    //////////////////////////////////////////

    #include "unp.h"

    void str_cli(FILE *fp,int sockfd)
    {
    char sendline[MAXLINE],recvline[MAXLINE];
    //字符串最大的数组
    while(fgets(sendline,MAXLINE,fp)!=NULL){
    //sendline作为字符型指针,指向存储读入数据的缓冲区地址
    //fp作为读取的流
    writen(sockfd,sendline,strlen(sendline));
    //按照文件的操作方式操作sockfd接口
    //sendline缓冲区作为发出的缓冲区
    if(readline(sockfd,recvline,MAXLINE)==0)
    err_quit("str_cli:server terminanted prematurely");
    //readline()作用
    fputs(recvline,stdout);
    //stdout是一个文件指针是一个标准输出
    }
    }

  • 相关阅读:
    codevs 1450 xth 的旅行
    Loj #6287 诗歌
    Codeforces 323C Two permutations
    Spoj MKTHNUM
    [TJOI2015]弦论
    Spoj SUBLEX
    bzoj 4338: BJOI2015 糖果
    bzoj 3462: DZY Loves Math II
    bzoj 2843: 极地旅行社
    清北学堂模拟赛d4t5 b
  • 原文地址:https://www.cnblogs.com/fenglongyu/p/7531628.html
Copyright © 2011-2022 走看看