⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.c

📁 为一个单进程循环的c/s服务器
💻 C
字号:
/****************************************************************************    Copyright (C) 2006 by Soasen Co.,Ltd.   **    desc:  CS模式通用客户端*    座友铭:凡是程序当前不需要的,都是垃圾,80%的时间做20%的事情。(程序的效率)*                                                                         ****************************************************************************/#include	<sys/types.h>#include	<sys/socket.h>#include	<netinet/in.h>#include	<arpa/inet.h>#include	<netdb.h>#include	<stdio.h>#include	<unistd.h>#include	<errno.h>#include    <string.h>#include	<stdlib.h>#define	MAXDATASIZE	1024void process(FILE *fp,int sockfd);int main(int argc,char *argv[]){    int sd,rc,i;    struct sockaddr_in localAddr,servAddr;    struct hostent *h;    int	port;    if(argc!=3)    {        printf("usage: %s<server><IP>\n",argv[0]);        exit(1);    }    h=gethostbyname(argv[1]);    if(h==NULL)    {        printf("%s:unknown host'%s'\n",argv[0],argv[1]);        exit(1);    }    if((port=atoi(argv[2]))<0)     {         fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);         exit(1);     }     servAddr.sin_family=h->h_addrtype;    memcpy((char *)&servAddr.sin_addr.s_addr,h->h_addr_list[0],h->h_length);    servAddr.sin_port=htons(port);    sd=socket(AF_INET,SOCK_STREAM,0);    if(sd<0)    {        perror("cannot open socket");        exit(1);    }    /*绑定端口号*/    localAddr.sin_family=AF_INET;    localAddr.sin_addr.s_addr=htonl(INADDR_ANY);    localAddr.sin_port=htons(0);    rc=bind(sd,(struct sockaddr *)&localAddr,sizeof(localAddr));    if(rc<0)    {        printf("%s:cannot bind port TCP %d\n",argv[0],port);        perror("error");        exit(1);    }    /*连接到服务器*/    rc=connect(sd,(struct sockaddr *)&servAddr,sizeof(servAddr));    if(rc<0)    {        perror("cannot connect");        exit(1);    }    process(stdin,sd);    close(sd);}void process(FILE *fp,int sockfd){    char sendline[MAXDATASIZE],revline[MAXDATASIZE];    int numbytes;    printf("Connetc to server:\n");    while(fgets(sendline,MAXDATASIZE,fp)!=NULL){        send(sockfd,sendline,strlen(sendline),0);        if((numbytes=recv(sockfd,revline,MAXDATASIZE,0))==0){            printf("server termined.\n");            return;        }        revline[numbytes]='\0';        printf("recv message:%s\n",revline);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -