永发信息网

请大神帮我把这段socket编程的C语言代码代称C++代码吧

答案:3  悬赏:40  手机版
解决时间 2021-03-31 07:30
请大神帮我把这段socket编程的C语言代码代称C++代码吧
最佳答案
这是大致的结构,你这给的是图片,要是是文本就好了,不然要打这么多字。。。

class Server {
public:
    
    Server(int family, int type, int proto, 
           int port = 9000, int que_size = 5)
        : _family(family), _type(type), _protocol(proto), 
          _port(port), _que_size(que_size) {}
    ~Server() { close(_serv_sock); }
    bool init();  // 初始化socket
    void run();   // 运行服务程序
private:
    int serve(int client_sock);
    
    int  _serv_sock;  // 正在监听的端口
    int  _family;     // 地址族
    int  _type;       // 类型:SOCK_STREAM SOCK_DGRAM
    int  _protocol;   // 协议:IPPROTO_TCP IPPROTO_UDP
    int  _port;       // 端口号
    int  _que_size;   // 监听队列的长度
};


bool Server::init()
{
    _serv_sock = socket(_family, _type, _protocol);
    
    struct sockaddr_in serv_addr;
    serv_addr.sin_family      = _family;
    serv_addr.sin_port        = htons(_port);
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    memset(&(server_addr.sin_zero), 0, 8);
    
    if(bind(_serv_sock, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1) {
        printf("Bad bind
");
        perror("details");
        return false;
    }
    
    if(listen(_serv_sock, _que_size) == -1) {
        printf("Bad listen
");
        exit(1);
    }
    
    printf("Accepting connections ...
");
    return true;
}

void Server::run()
{
    struct sockaddr_in clientAddr;
    int len = sizeof(struct sockaddr_in);
    
    while(true) {
        int client_sock = accept(_serv_sock, (struct sockaddr *)&clientAddr, &len);
        int pid = fork();
        
        if(pid == 0) {  // 如果是子进程
            int exit_code = serve(client_sock);
            close(client_sock);
            exit(EXIT_SUCCESS);
        }
        close(client_sock);
    }
}

int Server::serv(int client_sock)
{
    while(true) {
        int len;
        char *head_str = "you said: ";
        
        if(read(client_sock, &len, sizeof(len)) == 0)
            return 0;
            
        char *text = new char[len];
        read(client_sock, text, len);
        int n = strlen(text);  // 避免多次调用 strlen
        
        for(int i = 0; i < n; i++)
            text[i] = toupper(text[i]);
            
        char *text2 = new char[len + strlen(head_str) + 1];
        strcpy(text2, head_str);
        strcat(text2, text);
        
        if(send(client_sock, text2, strlen(text2), 0) == -1) {
            perror("call to send");
            delete[] text;  // 在这里也应释放内存
            delete[] text2;
            exit(1);
        }
        delete[] text;
        delete[] text2;
    }
}

int main()
{
    Server serv(AF_INET, SOCK_STREAM, 0);
    if(serv.init())
       serv.run();
    return 0;
}
全部回答
你急不急,不急的话我给你弄
全是图片, 你想累死我, 把文本复制给来.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
加拿大冰酒VQA标志&“Ice Wine”和“Icew
求国嵌 嵌入式Linux系统移植专题班 视频及相
公司的人力架构表中有所有员工的入职时间05年
面对男人会紧张怎么办
第一签 乾卦 上上吉 飞龙变化之象圣意:人事
为什么溺水首先cpr而不是控水
潮州开店有钱赚嘛,在潮州开店
最近牙酸,却很难很难松开,不能咬东西怎么办
第六题的第1题怎么写
水煮板栗煮一天好吃吗?
mov dl,byte ptr [ecx+eax] 是什么意思?
舞蹈技术入股协议书如何写?
KEF的Q35音箱,配什么功放合适
泔水不能喂猪了,一桶桶产生怎么办
drink的用法drink一般是可数名词还是不
推荐资讯
梦见锅里有满满一锅水溢出来了
天天勤业敬业作表率的仿写下一句
怎么样才能赚到第一桶金?
一道SAT语法
2011年家属楼平米造价大概多少
单选题史书《三国志》记载,“若病结积在内,
用什么能刷锅底?
当你想让别人猜时,你应说什么用英语
婚前男方付首付买房,房产证上只写了男方名字
如何修改linux最大文件打开数
为何12306网站好多车次查不到,别的软件上有
陕汽德龙新m3000牵引车,国四的375马力拉40吨
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?