rls와 rlsd
그에 비해 클라이언트의 프로그램은 비교적 간단하다. 먼저 sock 을 획득하기만 하면 된다.id, 그리고 대응하는 sock과connect를 진행합니다. 기타는 다음과 같습니다.
서버측 코드:
1 #include
2 #include
3 #include
4 #include
5 #includein.h>
6 #include
7 #include
8 #include<string.h>
9 #define PORTNUM 15000
10 #define HOSTLEN 256
11 #define oops(msg) {printf("error:%s
",msg);return 1;}
12 int main(int ac,char * av[]){
13 struct sockaddr_in saddr;
14 struct hostent * hp;
15 char hostname[HOSTLEN];
16 int sock_id,sock_fd;
17 FILE * sock_fpi,* sock_fpo;
18 FILE * pipe_fp;
19 char dirname[BUFSIZ];
20 char command[BUFSIZ];
21 int dirlen,c;
22 sock_id=socket(PF_INET,SOCK_STREAM,0);//set socket
23 if(sock_id==-1)
24 oops("socket");
25 bzero((void *)&saddr,sizeof(saddr));//empty saddr
26 gethostname(hostname,HOSTLEN);
27 printf("hostname:%s
",hostname);
28 hp=gethostbyname(hostname);
29 bcopy((void *)hp->h_addr,(void *)&saddr.sin_addr,hp->h_length);
30 saddr.sin_port=htons(PORTNUM);
31 saddr.sin_family=AF_INET;
32 if(bind(sock_id,(struct sockaddr *)&saddr,sizeof(saddr))!=0)//bind address
33 oops("bind");
34 if(listen(sock_id,1)!=0)//listen
35 oops("listen");
36 while(1){
37 sock_fd=accept(sock_id,NULL,NULL);//start accept
38 if(sock_fd==-1)
39 oops("accept");
40 if((sock_fpi=fdopen(sock_fd,"r"))==NULL)
41 oops("fdopen reading");
42 if(fgets(dirname,BUFSIZ-5,sock_fpi)==NULL)
43 oops("reading dirname");
44 sanitize(dirname);
45 if((sock_fpo=fdopen(sock_fd,"w"))==NULL)
46 oops("fdopen writing");
47 sprintf(command,"ls %s",dirname);
48 if((pipe_fp=popen(command,"r"))==NULL)
49 oops("popen");
50 while((c=getc(pipe_fp))!=EOF)
51 putc(c,sock_fpo);
52 pclose(pipe_fp);
53 pclose(sock_fpo);
54 pclose(sock_fpi);
55 }
56 }
57 sanitize(char * str){
58 char * src,* dest;
59 for(src=dest=str;*src;src++)
60 if(*src=='/'||isalnum(*str))
61 *dest++=*src;
62 *dest='\0';
63 }
클라이언트 코드:
1 #include
2 #include
3 #include
4 #includein.h>
5 #include
6 #define oops(msg) {printf("error:%s
",msg);return 1;}
7 #define PORTNUM 15000
8 main(int ac,char * av[]){
9 struct sockaddr_in servadd;
10 struct hostent * hp;
11 int sock_id,sock_fd;
12 char message[BUFSIZ];
13 char buffer[BUFSIZ];
14 int messlen,n_read;
15 sock_id=socket(PF_INET,SOCK_STREAM,0);//attention:PF_INT NOT AF_INT
16 if(sock_id==-1)
17 oops("socket");
18 bzero(&servadd,sizeof(servadd));
19 hp=gethostbyname(av[1]);
20 if(hp==NULL)
21 oops(av[1]);
22 bcopy(hp->h_addr,(struct sockaddr *)&servadd.sin_addr,hp->h_length);
23 servadd.sin_port=htons(PORTNUM);
24 servadd.sin_family=AF_INET;
25 if(connect(sock_id,(struct sockaddr *)&servadd,sizeof(servadd))!=0)//connect
26 oops("connect");
27 if(write(sock_id,av[2],strlen(av[2]))==-1)
28 oops("write");
29 if(write(sock_id,"
",1)==-1)
30 oops("write");
31 while((n_read=read(sock_id,buffer,BUFSIZ))>0)
32 if(write(1,buffer,n_read)==-1)
33 oops("write");
34 close(sock_id);
35 }
호출은 다음과 같습니다.
서버 시작:./rlsd&
클라이언트 액세스:./rls jsonzhang-Vostro-23-3340~/데스크톱/workplace/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.