UDP Echo Client
サーバーを書いてみたので、次はクライアント。
#include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> void die_with_error(char *errorMessage) { perror(errorMessage); exit(1); } int main(int argc, char* args[]) { if ( argc != 4 ){ printf("Usage: %s $SERVER_LISTEN_IP $SERVER_LISTEN_PORT $MESSAGE\n", args[0]); exit(1); } int sock; int port = atoi(args[2]); if( port <= 0 || 65535 < port ){ die_with_error("Invalid port range.\n"); } struct sockaddr_in addr; sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(args[1]); sendto(sock, args[3], strlen(args[3]), 0, (struct sockaddr *)&addr, sizeof(addr)); close(sock); return 0; }
以下のように実行する。
$ ./a.out 127.0.0.1 9999 Hello
実行結果等は何も出さずに終わってしまうが。とりあえず、UDP Echo Server - Shammerismで作成したサーバーへメッセージを送信することはできた。
UDP の場合は、TCP と違い connect 関数を使用せずにメッセージと一緒に宛先情報を指定して送信するのが一般的なようだ。