简单的客户端,服务端通信

来源:互联网 发布:保险网络增员话术 编辑:程序博客网 时间:2024/04/30 18:23
client.c代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/types.h>#include <unistd.h>#define BUFLEN 10int main(int argc, char **argv){    int sockfd;    int port = 4567;    struct sockaddr_in ser_addr;    int len;    char buf[BUFLEN];     /*建立socket*/    if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){        printf("server socket creation error\n");        return -1;    }else     printf("server socket success\n");     ser_addr.sin_port = htons(port);    ser_addr.sin_family = AF_INET;    if (inet_aton(argv[1], (struct in_addr *)&ser_addr.sin_addr.s_addr) == 0) {       printf("server  error\n");        return -1;        }          /*开始连接服务器*/        if(connect(sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr)) == -1){        perror("connect");        exit(errno);    }else        printf("conncet success!\n");     while(1){        /******接收消息*******/        bzero(buf,BUFLEN);    len = recv(sockfd,buf,BUFLEN,0);    if(len > 0)      printf("服务器发来的消息是:%s,共有字节数是: %d\n",buf,len-1);     else       printf("接受消息失败!\n");        /******发送消息*******/         bzero(buf,BUFLEN);    printf("请输入发送给对方的消息:");      /*fgets函数:从流中读取BUFLEN-1个字符*/        fgets(buf,BUFLEN,stdin);        len = send(sockfd,buf,strlen(buf),0);        if(len > 0)            printf("消息发送成功,本次共发送的字节数是:%d\n",len);                    else{             printf("聊天终止!\n");                break;   }          }    /*关闭连接*/    close(sockfd);    return 0;}              
View Code

server.c代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/types.h>#include <unistd.h>#define BUFLEN 10int main(int argc,char **argv){int ser_sockfd,cli_sockfd;int port = 4567;int len;   //struct sockaddr_in ser_addr;struct sockaddr_in cli_addr;char buf[BUFLEN]; /*建立socket*/if ((ser_sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){    printf("server socket creation error\n");        return -1;}elseprintf("socket create success!\n"); /*设置服务器ip*/bzero(&ser_addr,sizeof(ser_addr));ser_addr.sin_family = AF_INET; /*设置服务器端口*/ser_addr.sin_port=htons(port);if (argv[1])        ser_addr.sin_addr.s_addr = inet_addr(argv[1]);    else        ser_addr.sin_addr.s_addr = INADDR_ANY;/*把地址和端口帮定到套接字上*/if (bind(ser_sockfd,(struct sockaddr*) &ser_addr,sizeof(struct sockaddr_in)) == -1){ printf("server binding error\n");        return -1;}else        printf("bind success!\n");/*侦听本地端口*/if (listen(ser_sockfd,5) == -1){ printf("server listening error\n");        return -1;}else        printf("the server is listening!\n");  while(1){        printf("*****************聊天开始***************\n");if ((cli_sockfd = accept(ser_sockfd,(struct sockaddr*)&cli_addr,&len)) == -1){printf("server acception error\n");        return -1;}else  printf("正在与您聊天的客户端是:%s: %d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));while(1){ /******发送消息*******/            bzero(buf,BUFLEN); /*fgets函数:从流中读取BUFLEN-1个字符*/            fgets(buf,BUFLEN,stdin);             len = send(cli_sockfd,buf,strlen(buf),0);            if(len > 0)                printf("消息发送成功,本次共发送的字节数是:%d\n",len);                        else{                printf("消息发送失败!\n");                break;                        }            /******接收消息*******/            bzero(buf,BUFLEN);            len = recv(cli_sockfd,buf,BUFLEN,0);            if(len > 0)                printf("客户端发来的信息是:%s,共有字节数是: %d\n",buf,len);            else{                    printf("聊天终止!\n");                break;                    }        }        /*关闭聊天的套接字*/        close(cli_sockfd);           }    /*关闭服务器的套接字*/    close(ser_sockfd);    return 0;}
View Code

 

0 0
原创粉丝点击