日期:2014-05-16  浏览次数:20743 次

echo的传输时间问题
最近在做ipv6下面的数据传输测试
自己弄了个程序,但是具体传输时间一直不知道怎么解决
这个是服务器端的
C/C++ code
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>

#include <stdlib.h>
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <signal.h>


static  int listen_fd  = -1;

void exit_handler(int no)
{
    close(listen_fd);
    exit(0);
}

int main(int argc,char * argv[])
{
    unsigned short port = 10002;

    char buffer[1024000];
    int  len,i;


    signal(SIGTERM,exit_handler);
    signal(SIGINT,exit_handler);

       /* ipv 6 地址 */
    struct sockaddr_in6 server_addr;
    struct sockaddr_in6 client_addr;
    socklen_t sockaddr_len = sizeof(struct sockaddr_in6);

    if(argc > 1)
        port = (unsigned short)atoi(argv[1]);




    /* 第一步:创建TCP 侦听SOCKET*/
    listen_fd  = socket(PF_INET6,SOCK_STREAM,0);
    if(listen_fd == -1)
    {
        perror("socket");
    }


    /* 第二步:设置侦听端口 */
       memset((void *)&server_addr,0,sizeof(server_addr));
        
    server_addr.sin6_family = AF_INET6 ; /* ipv6 */
    server_addr.sin6_port = htons(port);
    server_addr.sin6_addr = in6addr_any;

    if(bind(listen_fd,(struct sockaddr *)&server_addr,sockaddr_len)!=0)
    {
        perror("bind");
        exit_handler(0);

    }

    /* 第三步:通知内核开始侦听 ,这里是非阻塞 */
    if(listen(listen_fd,20)!= 0)
    {
        perror("listen");
        exit_handler(0);
    }

    fprintf(stdout,"TCP echo server ,listen on %d\n",port);

    /* 第四步:开始用等待客户端的联接 */
    while(1)
    {
        int new_fd ;
                memset((void *)&client_addr,0,sizeof(client_addr));
                   sockaddr_len = sizeof(client_addr);

        /* 没有客户端联接,将会这里阻塞*/
        new_fd = accept(listen_fd,(struct sockaddr *)&client_addr,&sockaddr_len);
        if(new_fd == -1)
            continue;

              

        fprintf(stdout,"client connect: ip %s,port %d\n",inet_ntop(AF_INET6, (void *)&(client_addr.sin6_addr),buffer, sockaddr_len),ntohs(client_addr.sin6_port));


         
        /* 做ECHO操作*/
        len =  recv(new_fd,buffer,sizeof(buffer),0);
        if(len <=0)
            continue;

        if(strncmp("exit",buffer,4)!=0)
                 send(new_fd,buffer,len,0);
             
             close(new_fd);


    }

    fprintf(stdout,"close TCP server\n%d");  
    exit_handler(0);


}

这个是客户端的
C/C++ code
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>

#include <stdlib.h>
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>


static  int tcp_fd  = -1;

void exit_handler(int no)
{
   close(tcp_fd);
    exit(0);
}

int main(int argc,char * argv[])
{
   unsigned short port = 10002;
    unsigned char ip[512] = "fe80::230:1bff:fe3e:a3c6";
    char buffer[10240000];
    ssize_t  len;
    int a;
 
   int   tv44;
   int Datasize;
 struct timeval tv;
 struct timeval tv1;
 struct timeval tv2; 
   
    signal(SIGTERM,exit_handler);
    signal(SIGINT,exit_handler);

   
    struct sockaddr_in6 server_addr;
    
    socklen_t sockaddr_len = sizeof(struct sockaddr_in6);

   if(argc > 1)
      //port = (unsigned short)atoi(argv[1]);
       Datasize =(unsigned short)atoi(argv[1]);
   for(a=0;a<atoi(argv[1]);a++)
      buffer[a]='1';
    if(argc > 2)
       strncpy(ip,argv[2],sizeof(ip)-1);



    /* 第一步:创建TCP 侦听SOCKET*/
    tcp_fd  = socket(PF_INET6,SOCK_STREAM,0);
     if(tcp_fd == -1)
       {
          perror