システムプログラム02-ver02_client


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

/* ポート番号9000を使用する */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define NSTRS 1 /* 文字列の個数 */
#define STRMAX 60 /* 文字列長さ */

char *strs[NSTRS];

extern int errono;

void input_strs(){
int i;
char e[]="\n";
for(i=0;i<NSTRS;i++){
printf("str[%d]:",i);
strs[i]=malloc(STRMAX);
gets(strs[i]);
strcat(strs[i],e);
}
}

int main(int ac, char *av[]){
char c;
FILE *fp;
char hostname[64];
register int i,s;
struct hostent *hp;
struct sockaddr_in sin;

printf(">> client run\n");

/* まずホストネームを取得 */
printf("__connect server name ? :");
gets(hostname);

if((hp=gethostbyname(hostname))==NULL){
fprintf(stderr,"%s: unknown host.\n", hostname);
exit(1);
}

if((s=socket(AF_INET,SOCK_STREAM,0))<0){
perror("clisent: socket");
exit(1);
}

sin.sin_family=AF_INET;
sin.sin_port=htons(9000);
bcopy(hp->h_addr,&sin.sin_addr,hp->h_length);

if(connect(s, (struct sockaddr*)&sin, sizeof(sin))<0){
perror("client: connect");
exit(1);
}

/* 送る文字列を作成する */
input_strs();

/* こちらから文字列をサーバーに送る */
for(i=0;i<NSTRS;i++)
send(s,strs[i],strlen(strs[i]),0);

fp=fdopen(s,"r");

/* サーバーから文字列を読み取り、それを表示する */
printf(">> text from server\n");
for(i=0;i<NSTRS;i++){
while((c=fgetc(fp))!=EOF){
putchar(c);
if(c=='\n')
break;
}
}

/*
*ここで、通信を切断するために、close()を用いる
*/
close(s);

exit(0);
}