'과거의 컴퓨터 공부/소켓 프로그래밍'에 해당하는 글 6건

반응형

[list.c]

[result]


[host 상에서 구현] 

[gate@localhost gate]$ cat ls_server.c

#include <stdio.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <dirent.h>


#define PORT 9080


char err_1[]="Directory error";

char rBuffer[BUFSIZ];


main()

{

int c_socket,s_socket;

struct sockaddr_in s_addr,c_addr;

int len, length;

int n,i;


char *temp;

DIR *dp;

struct dirent *dir;

s_socket=socket(PF_INET,SOCK_STREAM,0);

memset(&s_addr,0,sizeof(s_addr));

s_addr.sin_addr.s_addr=htonl(INADDR_ANY);

s_addr.sin_family=AF_INET;

s_addr.sin_port=htons(PORT);

if(bind(s_socket,(struct sockaddr*)&s_addr,sizeof(s_addr))==-1){

printf("Can not Bind\n");

return -1;

}


if(listen(s_socket,5)==-1){

printf("listen Fail\n");

return -1;

}


while(1){

len = sizeof(c_addr);

c_socket=accept(s_socket,(struct sockaddr*) &c_addr,&len);

length = 0;

temp = rBuffer;

while((n=read(c_socket,temp,1))>0){

if(*temp == '\r')continue;

if(*temp == '\n')break;

if(*temp == '\0')break;

if(length == BUFSIZ) break;

temp++;length++;

}


rBuffer[length]='\0';


if(!strcmp(rBuffer,"ls")){

if((dp=opendir("."))==NULL){

write(c_socket,err_1,strlen(err_1));

}else{

while((dir=readdir(dp))!=NULL){

if(dir->d_ino ==0)continue;

write(c_socket,dir->d_name,strlen(dir->d_name));

write(c_socket," ",1);

}

closedir(dp);

}

}

close(c_socket);

}

close(s_socket);

}



host 부분에서 서버를 열어주고 ,클라이언트쪽에서 서버를 열고 ls 명령을 실행해주면

[gate@localhost gate]$ telnet 127.0.0.1 9080

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

ls

. .. .emacs .bash_logout .bash_profile .bashrc .screenrc gremlin gremlin.c .bash_history hello_server hello_server.c hello_client hello_client.c hello_ext_cliet hello_ext_server.c hello_ext_cliet.c hello_ext_server ls_server.c list.c ls_server Connection closed by foreign host.

이제 클라이언트를 만들어줄 차례 

반응형

'과거의 컴퓨터 공부 > 소켓 프로그래밍' 카테고리의 다른 글

hello_ext_client.c  (0) 2014.08.29
hello_ext_server.c  (0) 2014.08.29
port 종류  (0) 2014.08.28
Hello client  (0) 2014.08.28
Hello_server.c  (0) 2014.08.27
,
반응형

[gate@localhost gate]$ cat hello_ext_cliet.c

#include<stdio.h>

#include<netinet/in.h>

#include<sys/socket.h>

#include<strings.h>


#define PORT 9080

#define IPADDR "127.0.0.1"


char buffer[BUFSIZ];


main()

{

int c_socket;

struct sockaddr_in c_addr;

int len;

char rcvBuffer[BUFSIZ];

int n;


c_socket=socket(PF_INET, SOCK_STREAM, 0);


memset(&c_addr,0,sizeof(c_addr));

c_addr.sin_addr.s_addr=inet_addr(IPADDR);

c_addr.sin_family=AF_INET;

c_addr.sin_port=htons(PORT);

if(connect(c_socket,(struct sockaddr *) &c_addr, sizeof(c_addr)) == -1){

printf("Cannot Bind\n");

close(c_socket);

return -1;

}


scanf("%s",buffer);

buffer[strlen(buffer)] = '\0';

write(c_socket,rcvBuffer,strlen(buffer)+1);


if((n=read(c_socket,rcvBuffer,sizeof(rcvBuffer)))<0){

return(-1);

}

rcvBuffer[n]='\0';

printf("received Data: %s\n",rcvBuffer);


close(c_socket);

}

+)음 ,, 이건 한방에 컴파일됬다 서버랑 클라이언트 연결까지는 잘되는데  print 커맨드를 날리면 hello 가안뜨고 test 처럼 그냥 아무것도 안나와버린다 ㅡㅡ ;; 뭐가 잘못된거지 

반응형

'과거의 컴퓨터 공부 > 소켓 프로그래밍' 카테고리의 다른 글

ls_server.c  (0) 2014.08.31
hello_ext_server.c  (0) 2014.08.29
port 종류  (0) 2014.08.28
Hello client  (0) 2014.08.28
Hello_server.c  (0) 2014.08.27
,
반응형

+)에러 찾앗다 ,, 하 .. BUFSIZ 를 BUFSIZE로 쓰지를 않나 .. )를 하나 더써놓지를 않나 .. 

[gate@localhost gate]$ cat hello_ext_server.c

#include <stdio.h>

#include <netinet/in.h>

#include <sys/socket.h>


#define PORT 9080


char buffer[BUFSIZ]= "hello, world";

char rBuffer[BUFSIZ];


main(){


int c_socket,s_socket;

struct sockaddr_in s_addr, c_addr;

int len;

int n,i;


char *temp;

int length;


s_socket= socket(PF_INET,SOCK_STREAM,0);


memset(&s_addr,0,sizeof(s_addr));

s_addr.sin_addr.s_addr = htonl(INADDR_ANY);

s_addr.sin_family =AF_INET;

s_addr.sin_port=htons(PORT);


if(bind(s_socket,(struct sockaddr *) &s_addr, sizeof(s_addr))==-1) {

printf("Can not Bind\n");

return -1;

}


if(listen(s_socket,5)==-1){

printf("listen Fail\n");

return -1;

}


while(1){

len=sizeof(c_addr);

c_socket = accept(s_socket, (struct sockaddr *) &c_addr, &len);

length =0;

temp = rBuffer;

while((n=read(c_socket, temp, 1))>0){

if(*temp == '\r') continue;

if(*temp == '\n') break;

if(*temp == '\0') break;


if(length == BUFSIZ) break;

temp++, length++;

}


rBuffer[length] = '\0';


if(!strcmp(rBuffer, "print")){

n=strlen(buffer);

write(c_socket,buffer,n);

}

close(c_socket);

}

close(s_socket);

}


+)TCP/IP 통신함수 사용 순서 (자세한 내용 : http://forum.falinux.com/zbxe/index.php?document_srl=438082&mid=C_LIB)

+)텔넷에서 커맨드를 때릴때 print 라는걸 쳣다고가정하면 보통 5바이트가 들어갈거라 생각하는데 그렇지 않음;

0x0d(CR;캐리지 리턴), 0x0a(LF ; 라인피드)가 추가됨 >나중에 실수할거같다 ㅡㅡ ;  ) 

반응형

'과거의 컴퓨터 공부 > 소켓 프로그래밍' 카테고리의 다른 글

ls_server.c  (0) 2014.08.31
hello_ext_client.c  (0) 2014.08.29
port 종류  (0) 2014.08.28
Hello client  (0) 2014.08.28
Hello_server.c  (0) 2014.08.27
,
반응형

  ▲ 21번: FTP
  ▲ 22번: 보안 텔넷(SSH)
  ▲ 23번: 텔넷
  ▲ 25번: SMTP(메일 발송)
  ▲ 42번: 호스트 네임 서버
  ▲ 53번: 도메인 메인 서버
  ▲ 70번: 고퍼(Gopher)
  ▲ 79번: 핑거(Finger)
  ▲ 80번: 웹(HTTP)
  ▲ 88번: 커베로스 보안 규격
  ▲ 110번: POP3(메일 수신)
  ▲ 118, 156번: SQL 서비스
  ▲ 137~139번: NetBIOS(파일 서버)
  ▲ 161번: SNMP(네트워크 관리)
  ▲ 220번: IMAP3(일부 메일 서비스)
  ▲ 812, 987번: 버디버디
  ▲ 1214번: 카자
  ▲ 1720번: 넷미팅
  ▲ 1863, 6891~6900번: MSN 메신저
  ▲ 3389번: 터미널 서비스(원격 데스크톱)
  ▲ 4000번: ICQ
  ▲ 4000, 6112번: 배틀넷(디아블로, 스타크래스트, 워크래프트)
  ▲ 4662번: e동키(기본값)  ▲ 5500, 5800, 5900번: VNC
  ▲ 6257, 6699번: 윈MX(기본값)
  ▲ 6346번: 그누텔라
  ▲ 6699번: 냅스터
  ▲ 7674, 22321번: 소리바다 2
  ▲ 9292, 9999번: 구루구루
  ▲ 28290번: PDBOX


+) 요즘엔 23번 포트(telnet)은 지원해주지않아서 여러 웹사이트에서 막아두는 추세 

반응형

'과거의 컴퓨터 공부 > 소켓 프로그래밍' 카테고리의 다른 글

ls_server.c  (0) 2014.08.31
hello_ext_client.c  (0) 2014.08.29
hello_ext_server.c  (0) 2014.08.29
Hello client  (0) 2014.08.28
Hello_server.c  (0) 2014.08.27
,
반응형

#include<stdio.h>

#include<netinet/in.h>

#include<sys/socket.h>


#define PORT 9000

#define IPADDR "127.0.0.1"


main(){

int c_socket;

struct sockaddr_in c_addr;

int len;

int n;

char rcvBuffer[BUFSIZ];


c_socket=socket(PF_INET,SOCK_STREAM,0);

memset(&c_addr,0,sizeof(c_addr));

c_addr.sin_addr.s_addr=inet_addr(IPADDR);

c_addr.sin_family=AF_INET;

c_addr.sin_port=htons(PORT);

if(connect(c_socket,(struct sockaddr *) &c_addr, sizeof(c_addr))==-1){

printf("Can not connect\n");

close(c_socket);

return -1;

}


if((n=read(c_socket,rcvBuffer,sizeof(rcvBuffer)))<0){

return (-1);

}

rcvBuffer[n]='\0';

printf("received Data:%s\n",rcvBuffer);

close(c_socket);

}

결과



+)이미지 쓰기 귀찬아서 LOB 이미지에 실습중인게 함정

+) server 켜놓고 클라이언트 켜야함 (당연한 거지만 port도 맞춰줘야함 )

반응형

'과거의 컴퓨터 공부 > 소켓 프로그래밍' 카테고리의 다른 글

ls_server.c  (0) 2014.08.31
hello_ext_client.c  (0) 2014.08.29
hello_ext_server.c  (0) 2014.08.29
port 종류  (0) 2014.08.28
Hello_server.c  (0) 2014.08.27
,
반응형

#include<stdio.h>

#include<netinet/in.h>

#include<sys/socket.h>


#define PORT 9000


char buffer[BUFSIZ]="hello,world!\n";


main(){

int c_socket,s_socket;

struct sockaddr_in s_addr,c_addr;

int len;

int n;

s_socket=socket(PF_INET,SOCK_STREAM,0);

memset(&s_addr,0,sizeof(s_addr));

s_addr.sin_addr.s_addr=htonl(INADDR_ANY);

s_addr.sin_family=AF_INET;

s_addr.sin_port=htons(PORT);

if(bind(s_socket,(struct sockaddr *) &s_addr,sizeof(s_addr))==-1){

printf("Can not Bind\n");

return -1;

}


if(listen(s_socket,5)==-1){

printf("listen Fail\n");

return -1;

}

while(1){

len=sizeof(c_addr);

c_socket=accept(s_socket,(struct sockaddr *) &c_addr, &len);

n=strlen(buffer);

write(c_socket,buffer,n);

close(c_socket);

}

close(s_socket);

}

+)요즘따라 코딩이 얼마나 중요한지 뼈저리게 느끼고 있다 ㅡㅡ ; 하루도 거르지않고 코딩하는 습관을 들여야 겠다

실행하면 



반응형

'과거의 컴퓨터 공부 > 소켓 프로그래밍' 카테고리의 다른 글

ls_server.c  (0) 2014.08.31
hello_ext_client.c  (0) 2014.08.29
hello_ext_server.c  (0) 2014.08.29
port 종류  (0) 2014.08.28
Hello client  (0) 2014.08.28
,