linux c语言socket编程实例(1server-1client),一个服务器,一个客户端

服务器端代码:

/**************************************************
##filename      : server.c
##author        : GYZ                              
##e-mail        : [email protected]                
##create time   : 2018-07-23 10:41:42
##last modified : 2018-07-24 14:05:28
##description   : NA                               
**************************************************/

#include <stdio.h>                                
#include <stdlib.h>                                
#include <string.h>                                
#include <sys/socket.h>                                                   
#include <sys/types.h>
#include <unistd.h> 
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <errno.h>

int main(int argc,char *argv[])                    
{                                                  
    int server_sockfd;
    int client_sockfd;
    int ret;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    socklen_t server_addrlen;
    socklen_t client_addrlen;
    char data[100];
    char data1[100];
    int on = 1;

    /*1,create a socket*/
    /*IPPROTO=0,dumserver protocol for TCP*/
    server_sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == server_sockfd)
    {
        perror("socket"),exit(-1);
    }
    /*1.5 enable address reuse*/
    ret = setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
    /*2,bind the socket with an ip*/
    memset(&server_addr,0,sizeof(struct sockaddr_in));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(666);
    server_addr.sin_addr.s_addr = inet_addr("121.121.121.121");
    server_addrlen = sizeof(struct sockaddr);
    ret = bind(server_sockfd,(const struct sockaddr*)&server_addr,server_addrlen);
    if(-1 == ret)
    {
        perror("bind"),exit(-1);
    }
    /*3,listen the socket*/
    ret = listen(server_sockfd,6);
    if(-1 == ret)
    {
        perror("listen"),exit(-1);
    }
    while(1)
    {
        /*4,accept the data from the client*/
        client_addrlen = sizeof(struct sockaddr);
        client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_addr,&client_addrlen);
        if(-1 == client_sockfd)
        {
            perror("accept"),exit(-1);
        }
        printf("IP is %s\n",inet_ntoa(client_addr.sin_addr));
        printf("Port is %d\n",ntohs(client_addr.sin_port));
        while(1)
        {
            /*5,read the data from client*/
            ret = recv(client_sockfd,data,100,0);
            if(-1 == ret)
            {
                perror("recv"),exit(-1);
            }
            printf("data from client:%s\n",data);
            /*6,send the data to client*/
            printf("server send data:");
            scanf("%s",data1);
            ret = send(client_sockfd,data1,100,0);
            if(-1 == ret)
            {
                perror("send"),exit(-1);
            }
        }
    }
    close(client_sockfd);
    close(server_sockfd);
    return 0;                                      
}                                                  
                                                   

客户端代码:

    #include <stdio.h>                                
#include <stdlib.h>                                
#include <string.h>                                
#include <sys/socket.h>                                                   
#include <sys/types.h>
#include <unistd.h> 
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <errno.h>

                 

/**************************************************
##filename      : client.c
##author        : GYZ                              
##e-mail        : [email protected]                
##create time   : 2018-07-23 16:36:34
##last modified : 2018-07-24 14:09:39
##description   : NA                               
**************************************************/
#include "cs_socket.h"

int main(int argc,char *argv[])                    
{                                                  
    int client_sockfd;
    struct sockaddr_in client_addr;
    socklen_t client_addrlen;
    char data[20];
    char data1[20];
    int ret;

    /*1,create a socket*/
    client_sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(-1 == client_sockfd)
    {
        perror("socket"),exit(-1);
    }
    /*2,connect to the server*/
    memset(&client_addr,0,sizeof(struct sockaddr));
    client_addr.sin_family = AF_INET;
    client_addr.sin_port = htons(666);
    client_addr.sin_addr.s_addr = inet_addr("121.121.121.121");
    client_addrlen = sizeof(struct sockaddr);
    ret = connect(client_sockfd,(const struct sockaddr *)&client_addr,client_addrlen);
    if(-1 == ret)
    {
        perror("connect"),exit(-1);
    }
    while(1)
    {
        /*3,send the data to server*/
        printf("client data are :");
        scanf("%s",data);
        ret = send(client_sockfd,data,20,0);
        if(-1 == ret)
        {
            perror("write"),exit(-1);
        }
        /*4,receive the data from server*/
        ret = recv(client_sockfd,data1,100,0);
        if(-1 == ret)
        {
            perror("recv"),exit(-1);
        }
        printf("data from server:%s\n",data1);
    }
    close(client_sockfd);
    return 0;                                      
}                                                  
                                                   
   makefile文件:

all:server client

CC = gcc
SRC1 = server.c
SRC2 = client.c
OBJE1 = server
OBJE2 = client

${OBJE1}: 
    ${CC} ${SRC1} -o ${OBJE1} 
${OBJE2}:
    ${CC} ${SRC2} -o ${OBJE2} 

.PHONY:clean
clean :
    rm ${OBJE1} ${OBJE2}
 

                                               

                 

猜你喜欢

转载自blog.csdn.net/weixin_39465823/article/details/81219393