vector的标准用法linux

#include "stdafx.h"
#include "proto.h"
#include <stdlib.h>
#include <pthread.h>     
#include <stddef.h>
#include <string.h>

#include <iostream>
#include <vector>
//#include <string>

using namespace std;
//static struct _id_sock_info* psockAddress=0;
static vector<struct _id_sock_info> psockAddress;
void insertinto(struct sockaddr* sockinfo,char*id)
{
    time_t  timesec;
    struct _id_sock_info node;
    memset(&node,0,sizeof(struct _id_sock_info));
     strcpy(node.id,id);
     memcpy(&node.sock_addr,sockinfo,sizeof(struct sockaddr));
     time_t times;
     time(&times);
     node.timesec=times;
    psockAddress.push_back(node);      
}

void deletefrom(struct _id_sock_info* delnodeptr)
{    
}

//服务端初始化函数
int data_reset()
{
    //清除日志
    //SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
    printf("data_reset\n");
    initlock();
    printf("data_reset2\n");
 
     resetlog();
    printf("data_reset3\n");    

    struct _cfg  info;
    read_cfg(&info);
    

    
    //创建监听线程
    printf("data_reset4\n");
    pthread_t thread,thread2;  
 
    pthread_create(&thread,NULL,udplistenthread,NULL);  
    pthread_create(&thread2,NULL,beatthread,NULL);
    
    return 0;
}

//把网页客户端发送来的心跳请求加入到通信录里,以id为关键字,如果id一样就合并取最后一个
int addressput(struct sockaddr* sockaddr,char* id)
{
    flog("addressput");
    int i;
    int finded =0;
     time_t times;
    time(&times);
     int itemsize = 0;

    lock();
    
    
        //如果当前表项已经使用而且id正好和进来的心跳相同
    int ii;   
    
    for(ii=0; ii < psockAddress.size(); ii++)
    {
        if(strcasecmp(psockAddress[ii].id,id)==0)
        {
            //把套接字保存进来
            memcpy(&psockAddress[ii].sock_addr,sockaddr,sizeof(struct sockaddr));
            //把时间保存下来
            psockAddress[ii].timesec = times;
            finded = 1;            
            break;
        }            
    }
    //如果没有找到合适的id,并且有空余的表项
    if(!finded){
        insertinto(sockaddr,id);
     }
     unlock();
    return 0;
}

int timeoutaddress(int timeoutclient)
{
    time_t times;
    time(&times);
    
    

    lock();

    int ii;
    vector<struct _id_sock_info>::iterator it;
   for(it=psockAddress.begin(); it!=psockAddress.end(); )
   {
           if((times-it->timesec) >timeoutclient)
        {
            //把套接字保存进来
            //memcpy(&psockAddress[ii].sock_addr,sockaddr,sizeof(struct sockaddr));
            //把时间保存下来
            //psockAddress[ii].timesec = times;
            psockAddress.erase(it);
            //finded = 1;            
            //break;
        }    else{
            it++;
        }        
    }     
    unlock();
    
    return 0;
}



int broadcastpacket(char* pmsg,int msglen,int s)
{    
    int i;
    lock();    
    for(i=0; i < psockAddress.size(); i++){         
        sendto(s,pmsg,msglen,0,(struct sockaddr*)&psockAddress[i].sock_addr,sizeof(struct sockaddr));
        printf("broadcast a packet\n");        
    }    
    unlock();    
    return 0;
}

int makebroadcastpacket(char* pbuff,int cmdid,const char* id,const char* longc,const char* latc,const char* timec)
{
    memset(pbuff,0,132);
    pbuff[0]=cmdid;
    pbuff[1]='1';
    pbuff[2]='2';
    pbuff[3]='8';
    strcpy(pbuff+4,id);
    char* plong=pbuff+4+32;
    strcpy(plong,longc);
    plong += 32;
    strcpy(plong,latc);
    plong += 32;
    strcpy(plong,timec);
    return 128+4;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值