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

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

先週と同じ,チャットプログラムをリスト1と リスト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("%s",read_str);
  32   }
  33 
  34   close(fda);
  35   close(fds);
  36 
  37   return 0;
  38 }

2.2 通信の順序

ここでの通信は,以下の順序で行われている.
図 1: 通信の順序
\includegraphics[keepaspectratio, scale=1.0]{figure/TCP_procedure.eps}



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


no counter