| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 746 人关注过本帖
标题:【网络编程】求助
取消只看楼主 加入收藏
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
收藏
已结贴  问题点数:100 回复次数:5 
【网络编程】求助
服务端程序:
程序代码:
#include<sys/socket.h>
#include<errno.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdio.h>
#include<sys/wait.h>
#include<signal.h>
#include<string.h>

#define MAXLEN 1000

void sig_cld(int sig) 
{
    pid_t pid;
    while(  (pid = waitpid(-1, NULL, WNOHANG) )> 0)
        printf("process %d has exited\n", pid);
}


int main(int argc, char **argv)
{
    int listenfd;
    if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        fputs("socket failed", stderr);
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(6014);
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    bind(listenfd,(struct sockaddr *) &servaddr, sizeof(servaddr));
    listen(listenfd, 11);
    signal(SIGCHLD, sig_cld);
    while(1) {
        int connfd;
        char recvbuff[MAXLEN], sendbuff[MAXLEN];
        if( (connfd = accept(listenfd, NULL, NULL)) < 0){
            if(errno == EINTR) continue;
                        else fputs("accept Error", stderr);
        }
        pid_t pid;
        if( (pid = fork() )== 0){
            close(listenfd);
            while(read(connfd, recvbuff, MAXLEN) > 0){
                int a,b;
                sscanf(recvbuff, "%d%d", &a, &b);
                sprintf(sendbuff, "%d", a+b);
                if( write(connfd, sendbuff, strlen(sendbuff)) < 0)
                    fputs("Write Error", stderr);
            }
            return 0;  //为什么去掉这行 当关掉客户端时 电脑就会卡死啊? 谁做到么
        }
        close(connfd);
    }
    return 0;
}


客户端程序:
程序代码:
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdio.h>
#include<string.h>

#define MAXLEN 1000
int main(int argc, char *argv[])
{
    if(argc != 2) fputs("Input Error", stderr);
    int sockfd[10], i;
    struct sockaddr_in clientaddr;
    for( i=0; i<10; ++i){
        if((sockfd[i] = socket(AF_INET, SOCK_STREAM, 0)) < 0)
            fputs("socket failed", stderr);
            bzero(&clientaddr,sizeof(clientaddr));
            clientaddr.sin_family = AF_INET;
            clientaddr.sin_port = htons(6014);
            if( inet_pton(AF_INET, argv[1], &clientaddr.sin_addr) <= 0)
                fputs("inet_pton Error", stderr);
        if(connect(sockfd[i], (struct sockaddr *)&clientaddr, sizeof(clientaddr)) < 0)
            fputs("Connect error", stderr);
    }
        

    char recv[MAXLEN],sendbuff[MAXLEN];
    while( fgets(sendbuff, MAXLEN, stdin)  ){
        if(write(sockfd[1], sendbuff, strlen(sendbuff)) < 0)
            fputs("write Error", stderr);
        if( read(sockfd[1], recv, MAXLEN) > 0 ){
            fputs(recv, stdout);
            fputs("\n", stdout);
        }
    }
    
    return 0;
}


为什么去掉服务端那行return 语句 在关闭客户端时  电脑会卡死啊? 求解啊
搜索更多相关主题的帖子: 网络编程 服务端 color 
2012-02-20 12:47
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 2楼 laoyang103
绝不嫌弃, 我刚开始学, 什么都不懂 呵呵
2012-02-20 12:51
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 6楼 Devil_W
建多个进程是想实现下迸发啊, 呵呵
2012-02-20 15:37
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 5楼 小鱼儿c
应该是这错了, 刚开始想错了 呵呵,
如果不加return子进程也就开始一直死循环在那,然后开始接听客户端的请求了。
然后电脑垃圾了点就卡死了

[ 本帖最后由 草狼 于 2012-2-20 16:40 编辑 ]
2012-02-20 15:40
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 6楼 Devil_W
tp_run这类函数在哪个文件中啊, 我找变了所有文件都没找到么
2012-02-20 16:42
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 13楼 Devil_W
原来在TThreadPool.hh里面,当时我一看到定义了类 就没往下看
2012-02-20 17:59
快速回复:【网络编程】求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017120 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved