受信プログラムの解説
まず受信プログラムでは、エンドポイントのソケットを作り、
それにポートとアドレスを設定します.
  udp_socket = socket(AF_INET, SOCK_DGRAM,0);
  bzero((char *) &from_addr,sizeof(from_addr));
  my_addr.sin_family = AF_INET;
  my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  my_addr.sin_port = htons(WAIT_PORT);
  bind(udp_socket, (struct sockaddr *) &my_addr, sizeof(my_addr));
  |  
 
ここでbind()が終了して、アドレスとポートが設定された時点で
UPDパケットは受け付け状態になります。
これ以後、このマシン宛てのデータグラムが届いたら,OSはプログラムが
それを受信するまで保存してくれます。
 
後は以下のようにして、OSが保存してくれている受信パケットを取り出す
だけです。
 
  n = recvfrom(udp_socket,buf,BUFLEN,flag,&from_addr,&from_len);
  |  
 
まだデータが届いていない場合にはブロックされ、
ここでデータが届くまでプログラムは停止します。
  
   送信プログラムの解説
送信プログラムでまずOSにデータを渡すためのソケットを作り、
あて先のマシンのポートとアドレスを取得します.
  udp_socket = socket(AF_INET,SOCK_DGRAM,0);
  bzero((char *) &dest_addr, sizeof(dest_addr));
  dest_addr.sin_family = AF_INET;
  dest_host = gethostbyname(DEST_HOSTNAME);
  bcopy(dest_host->h_addr,(char *)&dest_addr.sin_addr,dest_host->h_length);
  dest_addr.sin_port = htons(DEST_PORT);
  |  
 
後は,作成したソケットあて先マシン宛てに、sendto()を用いて
データを送信するだけです。
 
  message = "Hello!\n";
  sendto(udp_socket,message,strlen(message),0,&dest_addr,sizeof(dest_addr));
  |  
 
届いたかどうか確認する手段はありません。
受信プログラムがbind()していないポート宛てに送ったデータは
失われてしまいます。
  
   |