• Linux 网络编程(TCP)


    • 客户端代码
    #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 <errno.h> 
    
    int main(int argc, char** argv){
    
        int socketfd = 0;
        char sendbuf[1024];
        char recvbuf[1024];
        struct sockaddr_in server_addr;
        int port = 8001;
        int nbytes;
    
        if((socketfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == 0){
            fprintf(stderr, "socket Error:%s
    a", strerror(errno));   
            exit(1);
        }
    
        bzero(&server_addr, sizeof(struct sockaddr_in));
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(port);
        server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
        if((connect(socketfd, &server_addr, sizeof(server_addr))) == -1){
            fprintf(stderr, "connect Error:%s
    a", strerror(errno));   
            exit(1);
        }
    
        while(1){
    
            nbytes = recv(socketfd, recvbuf, sizeof(recvbuf), 0);
            recvbuf[nbytes] = '';
    
            printf("recv data is:%s
    ",recvbuf);
    
            printf("Input:");
            scanf("%s", sendbuf);
    
            send(socketfd, sendbuf, sizeof(sendbuf), MSG_NOSIGNAL);        
        }
    
        close(socketfd);
    
        exit(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 <signal.h> 
    #include <errno.h>
    
    int main(int argc, char** argv){
        int old_fd,new_fd;
        struct sockaddr_in server_addr;
        struct sockaddr_in client_addr;
        char recvbuf[1024];
        int port = 8001;
        int len,nbytes;
    
        if((old_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == 0){
            fprintf(stderr, "socket Error:%s
    a", strerror(errno));   
            exit(1);
        }
    
        bzero(&server_addr, sizeof(struct sockaddr_in));
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(port);
        server_addr.sin_addr.s_addr =  htonl(INADDR_ANY);
    
        if((bind(old_fd, &server_addr, sizeof(server_addr))) == -1){
            fprintf(stderr, "bind Error:%s
    a", strerror(errno));   
            exit(1);
        }
    
        //listen的第二个参数backlog为内核缓存队列长度,该队列针对每个监听套接字包含两个队列:
        //一是未完成三次握手的,二是完成三次握手的
        if(listen(old_fd, 10) == -1){
            fprintf(stderr, "listen Error:%s
    a", strerror(errno));   
            exit(1);
        }
    
        while(1){
            len = sizeof(struct sockaddr_in);
            if ((new_fd = accept(old_fd, 
                (struct sockaddr *)&client_addr, 
                &len)) == -1) {   
                fprintf(stderr, "Accept error:%s
    a", strerror(errno));   
                exit(1);   
            }
    
    
            while(1){
                if (send(new_fd, "hello fredric", strlen("hello fredric"), MSG_NOSIGNAL) == -1) {   
                    fprintf(stderr, "send error:%s
    ", strerror(errno)); 
                    exit(1);   
                }
    
                nbytes = recv(new_fd, recvbuf, sizeof(recvbuf), 0);
                recvbuf[nbytes] = '';
    
                printf("recv data is:%s
    ",recvbuf);
            }
    
            close(new_fd);
        }
    
        close(old_fd);
        exit(0);
    }
  • 相关阅读:
    PHP多条件模糊查询
    纯干货!一款APP从设计稿到切图过程全方位揭秘(转)
    0532. K-diff Pairs in an Array (M)
    0933. Number of Recent Calls (E)
    0139. Word Break (M)
    0713. Subarray Product Less Than K (M)
    0399. Evaluate Division (M)
    0495. Teemo Attacking (M)
    0179. Largest Number (M)
    0389. Find the Difference (E)
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4549312.html
Copyright © 2020-2023  润新知