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


※上記の広告は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];
char *root;

extern int errno;

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

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

gethostname(hostname,sizeof(hostname));

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

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

sin.sin_family=AF_INET;
sin.sin_port=htons(9000);

sin.sin_addr.s_addr=htonl(INADDR_ANY);

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


if(listen(s,5)<0){
perror("server:listen");
exit(1);
}

if((ns=accept(s,(struct sockaddr*)&fsin, &fromlen)) <0){
perror("server:accept");
exit(1);
}

fp=fdopen(ns,"r");

/* クライアントから文字列をstrs[i]に表示 変換 格納 */

printf(">> text from client\n");
for(i=0;i<NSTRS;i++){
strs[i]=malloc(STRMAX);
root=strs[i];
while((c=fgetc(fp))!=EOF){
printf("%c",c);
if(('A'<=c)&&(c<='Z')){c=c+32;}
else if(('a'<=c)&&(c<='z')){c=c-32;}
*strs[i]=c;
if(c=='\n'){break;}
strs[i]++;
}
strs[i]=root;
}

/* 文字列をクライアントに送る*/

printf(">> send to client\n");
for(i=0;i<NSTRS;i++){
printf(strs[i]);
send(ns,strs[i],strlen(strs[i]),0);
}

close(s);

exit(0);
}