/* */ /* コネクション型クライアントプログラム (hellocl.c) */ /* Usage: hellocl host_name */ /* */ #include #include #include #include #include #define PROT_NO 5001 /* ポート番号 */ #define BUF_MAX 64 /* 通信バッファサイズ */ static struct sockaddr_in sv_addr; /* サーバアドレス */ static struct hostent *sv_ip; /* サーバIPアドレス */ static int sid; /* ソケット識別子 */ static char buf[BUF_MAX]; /* 通信バッファ */ /* クライアントメイン */ main(argc, argv) int argc; char *argv[]; /* argv[1]:サーバホスト名 */ { int rtn; /* 返却値 */ /* コネクション型ソケットの作成 (socket) */ sid = socket(AF_INET, SOCK_STREAM, 0); if (sid < 0) { perror("cl:socket"); exit(1); } /* サーバのIPアドレスを取得 */ sv_ip = gethostbyname(argv[1]); if (sv_ip == NULL) { perror("cl:gethostbyname"); exit(1); } /* ソケットの接続要求 (connect) */ bzero((char *)&sv_addr, sizeof(sv_addr)); sv_addr.sin_family = AF_INET; sv_addr.sin_port = htons(PROT_NO); memcpy((char *)&sv_addr.sin_addr, (char *)sv_ip->h_addr, sv_ip->h_length); rtn = connect(sid, &sv_addr, sizeof(sv_addr)); if (rtn < 0) { perror("cl:connect"); close(sid); exit(1); } /* メッセージ通信処理 (send/recv) */ rtn = recv(sid, buf, BUF_MAX, 0); if (rtn < 0) perror("cl:recv"); printf("%s\n", buf); /* ソケットの開放 (shutdown/close) */ rtn = shutdown(sid, 2); if (rtn < 0) perror("cl:shutdown"); close(sid); exit(0); }