<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 22  文章 - 467  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(25)

    隨筆分類(74)

    文章分類(1)

    收藏夾(277)

    在線工具

    在線資料

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 217580
    • 排名 - 261

    最新評論

    閱讀排行榜

    評論排行榜


    The Server.c
    #include<stdio.h>
    #include
    <stdlib.h>
    #include
    <sys/types.h>
    #include
    <sys/stat.h>
    #include
    <netinet/in.h>
    #include
    <sys/socket.h>
    #include
    <string.h>
    #include
    <unistd.h>
    #include
    <signal.h>
    #include
    <sys/ipc.h>
    #include
    <errno.h>
    #include
    <sys/shm.h>
    #include
    <time.h>
    #define PERM S_IRUSR|S_IWUSR
    #define MYPORT 3490
    #define BACKLOG 10 
    #define WELCOME "|----------Welcome to the chat room! ----------|"

    //int sockfd;
    /*void quit(int signo)
    {
        close(sockfd);
        printf("welcome come to the room again!\n");
        exit(0);
    }
    */


    //type int to char*
    void itoa(int i,char*string)
    {
            
    int power,j;
            j
    =i;
            
    for(power=1;j>=10;j/=10)
                    power
    *=10;
            
    for(;power>0;power/=10)
            
    {
                    
    *string++='0'+i/power;
                    i
    %=power;
            }

            
    *string='\0';
    }


    //get current system time
    void get_cur_time(char * time_str)
    {
            time_t timep;
            
    struct tm *p_curtime;
            
    char *time_tmp;
            time_tmp
    =(char *)malloc(2);
            memset(time_tmp,
    0,2);

            memset(time_str,
    0,20);
            time(
    &timep);
            p_curtime 
    = localtime(&timep);
            strcat(time_str,
    " (");
            itoa(p_curtime
    ->tm_hour,time_tmp);
            strcat(time_str,time_tmp);
            strcat(time_str,
    ":");
            itoa(p_curtime
    ->tm_min,time_tmp);
            strcat(time_str,time_tmp);
            strcat(time_str,
    ":");
            itoa(p_curtime
    ->tm_sec,time_tmp);
            strcat(time_str,time_tmp);
            strcat(time_str,
    ")");    
            free(time_tmp);
    }


    //Create Share Memory
    key_t shm_create()    
    {
            key_t shmid;
            
    //shmid = shmget(IPC_PRIVATE,1024,PERM);
            if((shmid = shmget(IPC_PRIVATE,1024,PERM)) == -1)
            
    {
                    fprintf(stderr,
    "Create Share Memory Error:%s\n\a",strerror(errno));
                    exit(
    1);
            }

            
    return shmid;
    }


    int bindPort(unsigned short int port)
    {        
            
    int sockfd;
            
    struct sockaddr_in my_addr;
            sockfd 
    = socket(AF_INET,SOCK_STREAM,0);
            my_addr.sin_family 
    = AF_INET;
            my_addr.sin_port 
    = htons(port);
            my_addr.sin_addr.s_addr 
    = INADDR_ANY;
            bzero(
    &(my_addr.sin_zero),0);

            
    if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)) == -1)
            
    {
                    perror(
    "bind");
                    exit(
    1);
            }

            printf(
    "bing success!\n");
            
    return sockfd;
    }


    int main(int argc, char *argv[])
    {
            
    int sockfd,clientfd,sin_size,recvbytes;
            pid_t pid,ppid;        
            
    char *buf, *r_addr, *w_addr, *temp, *time_str;//="\0";    
            struct sockaddr_in their_addr;
            key_t shmid;

            shmid 
    = shm_create();    //Create Share Memory

            temp 
    = (char *)malloc(255);
            time_str
    =(char *)malloc(20);    

        
    /*if(signal(SIGUSR1, quit) == SIG_ERR)    
        {
            perror("Can\'t set SIGUSR1 signal action");
            exit(1);
        }
    */


            sockfd 
    = bindPort(MYPORT);
            
            
    while(1)
            
    {                    
                    
    if(listen(sockfd,BACKLOG) == -1)
                    
    {
                            perror(
    "listen");
                            exit(
    1);
                    }

                    printf(
    "listening\n");
                    
    if((clientfd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) == -1)
                    
    {
                            perror(
    "accept");
                            exit(
    1);
                    }

                    printf(
    "accept from:%s\n",inet_ntoa(their_addr.sin_addr));
                    send(clientfd,WELCOME,strlen(WELCOME),
    0);
                    buf 
    = (char *)malloc(255);
                    
                    ppid 
    = fork();
                    
    if(ppid == 0)
                    
    {

                            
    //printf("ppid=0\n");
                            pid = fork();                        
                            
    while(1)
                            
    {
                                    
    if(pid > 0)
                                    
    {

                                            memset(buf,
    0,255);
                                            
    //printf("recv\n");
                                            
    //sleep(1);
                                            if((recvbytes = recv(clientfd,buf,255,0)) <= 0)
                                            
    {
                                                    perror(
    "recv1");
                                                    close(clientfd);
                                                    raise(SIGKILL);
                                                    exit(
    1);
                                            }
        
                                            
    //write buf's data to share memory
                                            w_addr = shmat(shmid, 00);
                                            memset(w_addr, 
    '\0'1024);
                                            strncpy(w_addr, buf, 
    1024);

                                            get_cur_time(time_str);
                                            strcat(buf,time_str);
                                            printf(
    " %s\n",buf);

                                    }

                                    
    else if(pid == 0)
                                    
    {
                                            
    //scanf("%s",buf);
                                            sleep(1);
                                            r_addr 
    = shmat(shmid, 00);
                                            
    //printf("---%s\n",r_addr);
                                            
    //printf("cmp:%d\n",strcmp(temp,r_addr));
                                            if(strcmp(temp,r_addr) != 0)
                                            
    {
                                                    strcpy(temp,r_addr);
                                                    get_cur_time(time_str);                                                
                                                    strcat(r_addr,time_str);
                                                
    //printf("discriptor:%d\n",clientfd);
                                                    
    //if(send(clientfd,buf,strlen(buf),0) == -1)
                                                    if(send(clientfd,r_addr,strlen(r_addr),0== -1)
                                                    
    {
                                                            perror(
    "send");
                                                    }

                                                    memset(r_addr, 
    '\0'1024);
                                                    strcpy(r_addr,temp);
                                                    
    //
                                            }

                                            
    /*get_cur_time(time_str);
                                            printf("time:%s\n",time_str);
                                            strcat(r_addr,time_str);
    */

                                    }

                                    
    else
                                            perror(
    "fork");
                            }

                    }
        
            }

            printf(
    "------------------------------\n");
            free(buf);
            close(sockfd);
            close(clientfd);

            
    return 0;
    }


    The Client.c

    #include<stdio.h>
    #include
    <netinet/in.h>
    #include
    <sys/socket.h>
    #include
    <sys/types.h>
    #include
    <string.h>
    #include
    <stdlib.h>
    #include
    <netdb.h>
    #include
    <unistd.h>
    #include
    <signal.h>
    #include
    <time.h>



    int main(int argc, char *argv[])
    {
            
    struct sockaddr_in clientaddr;
            pid_t pid;
            
    int clientfd,sendbytes,recvbytes;
            
    struct hostent *host;
            
    char *buf,*buf_r;

            
    if(argc < 4)
            
    {
                printf(
    "usage:\n");
                printf(
    "%s host port name\n",argv[0]);
                exit(
    1);
            }


            host 
    = gethostbyname(argv[1]);
            
    if((clientfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
            
    {
                    perror(
    "socket\n");
                    exit(
    1);
            }

            clientaddr.sin_family 
    = AF_INET;
            clientaddr.sin_port 
    = htons((uint16_t)atoi(argv[2]));
            clientaddr.sin_addr 
    = *((struct in_addr *)host->h_addr);
            bzero(
    &(clientaddr.sin_zero),0);
            
    if(connect(clientfd,(struct sockaddr *)&clientaddr,sizeof(struct sockaddr)) == -1)
            
    {
                    perror(
    "connect\n");
                    exit(
    1);
            }


            buf
    =(char *)malloc(120);
            memset(buf,
    0,120);
        
            buf_r
    =(char *)malloc(100);

            
    if( recv(clientfd,buf,100,0== -1)
            
    {
                    perror(
    "recv:");
                    exit(
    1);
            }

            printf(
    "\n%s\n",buf);

            pid 
    = fork();
            
    while(1)
            
    {
                    
    if(pid > 0){

                            
    //get_cur_time(time_str);

                            strcpy(buf,argv[
    3]);
                            strcat(buf,
    ":");
                            memset(buf_r,
    0,100);
                            
    //gets(buf_r);
                            fgets(buf_r,100,stdin);
                            strncat(buf,buf_r,strlen(buf_r)
    -1);
                            
    //strcat(buf,time_str);
                            
    //printf("---%s\n",buf);
                            if((sendbytes = send(clientfd,buf,strlen(buf),0)) == -1)
                            
    {
                                    perror(
    "send\n");
                                    exit(
    1);
                            }

                    }

                    
    else if(pid == 0)
                    
    {
                            
                            memset(buf,
    0,100);
                            
    if(recv(clientfd,buf,100,0<= 0)
                            
    {
                                    perror(
    "recv:");
                                    close(clientfd);
                                    raise(SIGSTOP);
                                    exit(
    1);
                            }

                            printf(
    "%s\n",buf);
                    }

                    
    else
                            perror(
    "fork");
            }

            close(clientfd);
            
    return 0;                
    }

    Can you help to modify this from using Sockets to using Pipes and Daemon Processes?
    posted on 2011-06-24 15:46 ApolloDeng 閱讀(670) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 18女人毛片水真多免费| 久久精品九九亚洲精品天堂| 七色永久性tv网站免费看| 亚洲av无码成人精品区一本二本 | 亚洲AV电影院在线观看| 免费无遮挡无码永久在线观看视频| 95免费观看体验区视频| 两性色午夜免费视频| 免费播放美女一级毛片| 亚洲午夜无码毛片av久久京东热| 亚洲AV电影院在线观看| 国产精品亚洲一区二区三区在线| 亚洲 无码 在线 专区| 在线观看成人免费| 美女被cao免费看在线看网站| 久草福利资源网站免费| 丝袜足液精子免费视频| www成人免费视频| 男女猛烈激情xx00免费视频| 亚洲精品无码专区在线播放| 亚洲AV色吊丝无码| 亚洲三级中文字幕| 亚洲一区动漫卡通在线播放| 亚洲欧洲日本精品| 亚洲国产成人精品电影| 亚洲精品乱码久久久久久下载| 亚洲av丰满熟妇在线播放| 亚洲综合精品一二三区在线| 久久精品国产亚洲AV麻豆~| 亚洲AV无码精品色午夜在线观看| 国产成人麻豆亚洲综合无码精品| 亚洲午夜精品第一区二区8050| 亚洲成A∨人片天堂网无码| 亚洲精品视频免费| 狠狠色婷婷狠狠狠亚洲综合| 久久亚洲国产成人影院网站| 久久久久亚洲AV无码专区桃色| 国产亚洲一区二区在线观看| 亚洲成AV人片在线播放无码| 亚洲va中文字幕无码久久不卡| 国产亚洲综合网曝门系列|