2 コンピューターをネットワークを使って通信する方法

2.1 通信を行うプログラムの例

コンピューターを使って,会話を行うチャットプログラムをリスト1と リスト2に示す.リスト1は,端末よりテキストを指定 のPCへ送信するプログラムである.一方,リスト2は,送られてきたテ キストを端末に表示するプログラムとなっている.これら2つのプログラムを使って,チャ ット(会話)ができる.
   1 #include <stdio.h>
   2 #include <string.h>
   3 #include <sys/types.h>
   4 #include <sys/socket.h>
   5 #include <netinet/in.h>
   6 #include <arpa/inet.h>
   7 
   8 int main(int argc, char *argv[])
   9 {
  10   struct sockaddr_in server;
  11   char message[80], ip_address[16];
  12   int fd;
  13 
  14   strcpy(ip_address,argv[1]);          // コマンドライン引数のIPアドレスのコピー
  15   fd=socket(PF_INET, SOCK_STREAM, 0);  // ソケットの作成
  16 
  17   memset((char *) &server, 0, sizeof(server));   // アドレス構造体の初期化
  18   server.sin_family=AF_INET;
  19   server.sin_port = htons(5320);
  20   server.sin_addr.s_addr=inet_addr(ip_address);
  21   connect(fd, (struct sockaddr *) &server, sizeof(server));
  22 
  23  
  24   while(1){
  25     printf("message:");
  26     fgets(message, 80, stdin);
  27     if(strncmp(message,"bye",3)==0)break;
  28     send(fd, message, strlen(message),0);
  29   }
  30   
  31   close(fd);
  32 
  33   return 0;
  34 }

   1 #include <stdio.h>
   2 #include <string.h>
   3 #include <sys/types.h>
   4 #include <sys/socket.h>
   5 #include <sys/socket.h>
   6 #include <netinet/in.h>
   7 #include <arpa/inet.h>
   8 
   9 int main(void)
  10 {
  11   struct sockaddr_in client, server;
  12   char read_str[80];
  13   int fds, fda, length;
  14   fds=socket(PF_INET, SOCK_STREAM, 0);
  15   memset((char *) &server, 0, sizeof(server));
  16 
  17   server.sin_family=AF_INET;
  18   server.sin_addr.s_addr = htonl(INADDR_ANY);
  19   server.sin_port = htons(5320);
  20   bind(fds, (struct sockaddr *) &server, sizeof(server));
  21 
  22   listen(fds, 1);
  23 
  24   length=sizeof(client);
  25 
  26   fda=accept(fds, (struct sockaddr *) &client, &length);
  27 
  28   while(1){
  29     int rn;
  30     rn = recv(fda, read_str, 80, 0);
  31     printf("%d\n",rn);
  32     printf("%s",read_str);
  33   }
  34 
  35   close(fda);
  36   close(fds);
  37 
  38   return 0;
  39 }

2.2 通信のプログラム概要

教科書 [*]のp.259-260に書いてある通り,通信のプログラムはファイルの 読み書きと似ている.ここでは述べないが,デバイス(キーボードなどの外部機器)との通 信もファイルの読み書きに似ている.コンピューターからみて,データを入出力するもの は,すべてファイルとして取り扱われ,ほとんど同じ方法で読み書きができる.

通信を行うためには,通信相手のコンピューターとプログラムを特定しなくてはならない. IPアドレスを指定することで,コンピューターを特定する.通信するプログラムはポート 番号により決める.コンピューターは多くの通信を同時に行っており,通信をするプログ ラムまで指定しなくてはならない.



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年10月17日


no counter