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);
    }
  • 相关阅读:
    Linq 入门 顺带 Func与Action
    关于asp.net 的一些好资料地址 , 防止丢失!
    Sql日期时间格式转换 备用
    自己动手写 ASP.NET MVC 分页 part1
    怎么做好一个美食排行榜的用户投票功能?
    「要买车网」免费获取汽车电商要买车网购车优惠券
    MVC Ajax Form & Ajax Valida(笔记)
    C# 序列化高级用法
    我与葡萄城的故事
    生成分布式随机ID
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4549312.html
Copyright © 2011-2022 走看看