C言語でサーバーとクライアントを作り 大きな数字を繰り返し送ることのできるプログラム
今回はC言語を使いサーバーとクライアントを作りました。同一LAN内であればサーバーとクライアント間でデータの送受信ができます。
このプログラムは入力した数字をプログラムに記入した回数送信し、そのデータの損失率と転送時間を求めることができます。
<クライアント側プログラム>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/time.h>
int main(int argc, char *argv){
clock_t c1,c2;
double diff;
int t;
int s;
struct sockaddr_in my, tar;
unsigned short port;
char data[1024];
unsigned int len;
long x;
double i;
printf("待ちポート番号を指定してください\n> ");
scanf("%hd", &port);
// ソケットの準備
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
memset(&my, 0, sizeof(my));
my.sin_family = AF_INET;
my.sin_port = htons(port);
len = sizeof(tar);
// ソケットとアプリの関連付け
// int bind(int socket, const struct sockaddr *address, socklen_t address_len);
bind(s, (struct sockaddr*)&my, sizeof(my));
memset(data, '\0', sizeof(data));
memset(&tar, 0, sizeof(tar));
// 受信
// int recvfrom(int socket, char *buffer,
// int length, int flags,
// struct sockaddr *address,
// int *address_length);
// 変数データに受信文字列を格納
c1 = clock();
for(i=0; i<10000; i++){
recvfrom(s, data, sizeof(data)-1, 0, (struct sockaddr*)&tar, &len);
x = atol(data);
printf("data : %ld\n", x);
if('1'== *data)break;
}
c2 = clock();
// 受信データ参照
printf("IP : %s\n", inet_ntoa(tar.sin_addr));
printf("port : %d\n", ntohs(tar.sin_port));
printf("%f%\n\a",100-(i/10));// 損失率 100-(i/送る予定の数 * 100)
diff = (double) (c2-c1) / CLOCKS_PER_SEC;
printf("diff time = %f\n", diff);
printf("%.0f個¥n",1000-i ); //1000 回送られてくるはずと受け取った数から何個損失したかを表示する。
// ソケット クローズ
close(s);
return 0;
}
*1
*1:
@All rights are returned to the author of this page and programme