zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    BZOJ 1578: [Usaco2009 Feb]Stock Market 股票市场( 背包dp )
    BZOJ 3315: [Usaco2013 Nov]Pogo-Cow( dp )
    BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )
    BZOJ 2427: [HAOI2010]软件安装( dp )
    BZOJ 3211: 花神游历各国( 线段树 )
    POJ 2528 线段树 + 离散化
    POJ 1151 Atlantis 线段树+离散化+扫描线
    POJ1177 Picture 线段树+离散化+扫描线
    BZOJ1016: [JSOI2008]最小生成树计数
    POJ2104 K-th Number 划分树 模板题啊
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/4515147.html
Copyright © 2011-2022 走看看