zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    JAVA8 之 Stream 流(四)
    关于iphone 6s 页面功能不能正常使用问题
    关于ES6语法的 一些新的特性
    微信授权一直跳转
    js 一道题目引发的正则的学习
    关于this在不同使用情况表示的含义
    详细解析arry.map() ,function.apply() 方法
    关于服务器无法在已发送http表头之后设置状态问题
    七牛上传视频并转码
    使用 v-cloak 防止页面加载时出现 vuejs 的变量名
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4549312.html
Copyright © 2011-2022 走看看