2015-01-19 1 views
0

Я использую beaglebone black. Операционная система - Debian GNU/Linux 7.7. Я использую язык C для запуска сервера и клиента с использованием TCP/IP.Как измерить пропускную способность TCP/IP на beaglebone black?

Это код, я использую для сервера:

/* A simple server in the internet domain using TCP 
    The port number is passed as an argument */ 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 

void error(const char *msg) 
{ 
    perror(msg); 
    exit(1); 
} 

int main(int argc, char *argv[]) 
{ 
    int sockfd, newsockfd, portno; 
    socklen_t clilen; 
    char buffer[256]; 
    struct sockaddr_in serv_addr, cli_addr; 
    int n; 
    if (argc < 2) { 
     fprintf(stderr,"ERROR, no port provided\n"); 
     exit(1); 
    } 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) 
     error("ERROR opening socket"); 
    bzero((char *) &serv_addr, sizeof(serv_addr)); 
    portno = atoi(argv[1]); 
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_addr.s_addr = INADDR_ANY; 
    serv_addr.sin_port = htons(portno); 
    if (bind(sockfd, (struct sockaddr *) &serv_addr, 
       sizeof(serv_addr)) < 0) 
       error("ERROR on binding"); 
    listen(sockfd,5); 
    clilen = sizeof(cli_addr); 
    newsockfd = accept(sockfd, 
       (struct sockaddr *) &cli_addr, 
       &clilen); 
    if (newsockfd < 0) 
      error("ERROR on accept"); 
while(1) 
{ 
bzero(buffer,256); 
n = read(newsockfd,buffer,255); 
if (n < 0) error("ERROR reading from socket"); 
printf("Here is the message: %s\n",buffer); 
n = write(newsockfd,"I got your message",18); 
if (n < 0) error("ERROR writing to socket"); 
} 
close(newsockfd); 
close(sockfd); 
return 0; 
} 

И это код, я использую для клиента:

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

void error(const char *msg) 
{ 
    perror(msg); 
    exit(0); 
} 

int main(int argc, char *argv[]) 
{ 
    int sockfd, portno, n; 
    struct sockaddr_in serv_addr; 
    struct hostent *server; 

    char buffer[256]; 
    if (argc < 3) { 
     fprintf(stderr,"usage %s hostname port\n", argv[0]); 
     exit(0); 
    } 
    portno = atoi(argv[2]); 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) 
     error("ERROR opening socket"); 
    server = gethostbyname(argv[1]); 
    if (server == NULL) { 
     fprintf(stderr,"ERROR, no such host\n"); 
     exit(0); 
    } 
    bzero((char *) &serv_addr, sizeof(serv_addr)); 
    serv_addr.sin_family = AF_INET; 
    bcopy((char *)server->h_addr, 
     (char *)&serv_addr.sin_addr.s_addr, 
     server->h_length); 
    serv_addr.sin_port = htons(portno); 
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
     error("ERROR connecting"); 

    while(1) 
    { 
    printf("Please enter the message: "); 
    bzero(buffer,256); 
    fgets(buffer,255,stdin); 
    n = write(sockfd,buffer,strlen(buffer)); 
    if (n < 0) 
     error("ERROR writing to socket"); 
    bzero(buffer,256); 
    n = read(sockfd,buffer,255); 
    if (n < 0) 
     error("ERROR reading from socket"); 
    printf("%s\n",buffer); 
    } 
    close(sockfd); 
    return 0; 
} 

Я использую gcc для компиляции гр кодов. И тогда я бегу их так:

на стороне сервера: ./server 32000

На стороне клиента: ./client [IP address of server] 32000

и сообщения передаются от клиента к серверу. Теперь, как я могу измерить пропускную способность? Я установил iperf, но я не знаю, как я могу использовать его при запуске сервера и клиента. Потому что, когда они работают, я могу передавать только сообщения, я не могу ввести другую команду.

Ethernet beaglebone black - 10/100M. Как узнать пропускную способность Ethernet для текущего общения?

+0

Являются ли клиенты и сервер работающими на одном компьютере? – sumithdev

+0

Я пробовал это как для одной машины, так и для отдельных машин (как для linux) – Melika

+0

Вы пытаетесь измерить пропускную способность для этой конкретной сессии TCP или пропускной способности TCP в целом. – sumithdev

ответ

0

Вы можете напрямую установить и использовать netperf, который является настольным инструментом. Вам не нужно писать сервер и клиент отдельно.

 Смежные вопросы

  • Нет связанных вопросов^_^