• c socket 开发测试


    c语言异常

    参照他人代码写一个tcp的 socket 开发测试

    异常A,在mac osx系统下编译失败,缺库转到debian下。

    异常B,include引用文件顺序不对,编译大遍异常

    异常C,/usr/include/x86_64-linux-gnu/sys/types.h:34:1: error: unknown type name ‘__u_char’ 文件前注释的问题,删掉注释则通过

     服务端

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h> 
    #include <stdlib.h>
    #include <string.h>
    #include <pthread.h>
    #include <errno.h>
    #include <stdio.h>
    int accepthandle(int acceptpoint);
    int main(void) {
        //服务端socket
        int socketfid;
        char buf[1024];
        struct sockaddr_in  server_add;
        char * localaddr = "127.0.0.1";//
        int pid;
        struct sockaddr_in client_add;
    
        server_add.sin_family=AF_INET;
        server_add.sin_port=htons(29001);
        server_add.sin_addr.s_addr=htonl(INADDR_ANY);
        
        socketfid=socket(AF_INET,SOCK_STREAM,0);
        printf("socket start 
    ");
        if (socketfid < 0) {
            printf("socket error 
    ");
            return -1;
        }
        printf("bind start 
    ");
        if(bind(socketfid,(struct sockaddr *)&server_add,sizeof(struct sockaddr))<0){
            printf("bind error 
    ");
            return -1;
        }
        //监听套接子
        printf("listen start 
    ");
        if(listen(socketfid,24)<0){
            printf("listen error 
    ");
            return -1;
        }
        printf("accept start 
    ");
        while(1){
            memset(&client_add, 0, sizeof(client_add));
            int leng=sizeof(client_add);
            int acceptresult=accept(socketfid,(struct sockaddr *) &client_add,&(leng));
           
            if (acceptresult < 0) {
                printf("accept error %d  %d is sub
    ", acceptresult,pid);
                //子进程结束了
                exit(0);
            }
            printf("clent addr%s porit %d
    ",
                   inet_ntop(AF_INET, &client_add.sin_addr, buf, sizeof(buf)),
                   ntohs(client_add.sin_port));
            pid = fork();
            printf("%d
    ",pid);
            if (pid < 0) {
                printf("pid<0
    ");
                close(acceptresult);
            }
            else if(pid == 0){
                printf("pid=0 is sub 
    ");
                //子进程停止监听,去处理接收数据
                close(socketfid);
                //子进程到了这里,执行完接收后,继续执行while 但是因为socketfid 已经关闭,accept 返回异常 -1 直接执行exit(0) 退出了子进程
                accepthandle(acceptresult);
            } else{
                //父进程到了这里,执行完这一步,继续while 到accept这里,又被阻塞。如此循环。
                //这里错打印不出结果,可能是shell只能展示一个进程的内容。
               printf("pid is parent
    ");
            }
     }
        return EXIT_SUCCESS;
    }
    int accepthandle(int acceptpoint){
        char buf[1024];
        int readresult;
        while(1){
            readresult=read(acceptpoint,buf,sizeof(buf));
            if(readresult<0){
                printf("read error 
    ");
                close(acceptpoint);
                break;
            }
            else if (readresult==0){
                printf("client exit 
    ");
                close(acceptpoint);
                break;
            }
            else{
                printf("client:%s
    ", buf);
                if (strcmp("exit", buf) == 0) {
                    printf("exit 
    ");
                    close(acceptpoint);
                    return 0;
                }
                
            }
            
            
        }
        return 0;
    }

    client

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h> 
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    #include <stdio.h>
    int main(void) {
        int socketfid;
        char buf[1024];
        struct sockaddr_in  server_add;
        char * localaddr = "127.0.0.1";//
        server_add.sin_family=AF_INET;
        server_add.sin_port=htons(29001);
        server_add.sin_addr.s_addr=htonl(INADDR_ANY);
        socketfid=socket(AF_INET,SOCK_STREAM,0);
        while (connect(socketfid,(struct sockaddr*)&server_add,sizeof(server_add))==-1){
          printf("Connect Error!
    ");
        }
        char *data="hello word";
        printf("length %d!
    ",sizeof(data));
        send( socketfid,data,sizeof(data),0);
        printf("bind start 
    ");
    
        close(socketfid);
      
       
        return EXIT_SUCCESS;
    }

     

  • 相关阅读:
    05. Spring Security 图形验证码
    Spring Security 登出
    03. Spring Security 异常处理
    02. Spring Security rememberMe
    Redirect和Forward的区别
    01. spring-security 初体验
    nextInt()和nextLine()注意点
    JavaBean
    05. Hystrix Dashboard
    bootstrap.yml 和 application.yml
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/4515147.html
Copyright © 2020-2023  润新知