1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <sys/stat.h>
4 #include <arpa/inet.h>
5 //include </usr/include/linux/in.h>
6 #include <errno.h>
7
8 int main()
9 {
10 int isock;
11 //소켓서술자
12 struct sockaddr_in staddr;
13 //네트워크의 연결을 처리하기위해 주소를 저장하는 구조체
14 int iret;
15 unsigned char ucBuff[250];
16
17 /*>>>>소켓열기<<<<*/
18 isock = socket(AF_INET,SOCK_STREAM,0);
19 //1.인터넷으로 연결된 프로세스들 간에 통신한다.(AF_INET)
20 //A = ADDRESS / F = Family / INET = 인터넷 의 약자
21 //2.TCP 방법을 이용해 통신한다.(SOCK_STREAM)
22
23 if(isock == -1)
24 {
25 perror("isock() : ");
26
27 return -1;
28 }
29
30 staddr.sin_family = AF_INET;
31 staddr.sin_port = htons(PORT);
32 //port의 경우 우리가 지정해 주어야 한다.
33 //상대방은 무조건 port번호가 4000번이어야 한다. 4000번에 접속할 예정임.
34 staddr.sin_addr.s_addr = inet_addr("192.168.10.250");
35 //staddr의 네트워크를 연결하기전에 주소와 포트등을 셋팅해준다. (IP ADDRESS)
36
37
38 iret = connect(isock,((struct sockaddr *)(&staddr)),sizeof(staddr));
39 //원형 man connect
40 /*int connect(int sockfd, const struct sockaddr *serv addr, socklen_t addrlen);*/
41 //연결함
42
55 }
45 perror("connect() : ");
46 //나머지 메시지를 알아서 적어준다. connect에서 error가 난걸 알기 쉽게하기 위해
47 //connect를 적어준것임.
48 close(isock);
49
50 return 0;
51 }
52
53 printf("%d\n",isock);
54
55 /*---------------------------Read----------------------------*/
56
57 iret = read(isock,ucBuff,sizeof(ucBuff));
58 //read는 읽어온 바이트 수 만큼 return 해준다.
59 ucBuff[iret] = 0;
60 //읽어온 바이트수인 "welcome"까지 return받고 뒤에 Null값을 줌.
61
62 printf("%s \n",ucBuff);
63
64 /*-------------------------Read End---------------------------*/
65
66 /*---------------------------Write----------------------------*/
67
68 write(isock,"Hello",5);
69
70 /*-------------------------Write End--------------------------*/
71
72 //************************************************************//
73 iret = read(1,ucBuff,sizeof(ucBuff));
74 // read(키보드(stdin),...,...);
75
76 write(isock,ucBuff,iret - 1);
77
78 //************************************************************//
79
80 /*>>>>소켓닫기<<<<*/
81 close(isock);
82
83 return 0;
84 }
-> //****************//의 사이 72~78
read로 키보드로 치는것(stdin)의 정보를 읽어들이고 write로 쓰고있다.
|
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <sys/stat.h>
4 #include <arpa/inet.h>
5
6
7 int main()
8 {
9 int isock;
10 int iClient1;
11 int iret;
12 unsigned int uisize;
13 struct sockaddr_in staddr;
14 struct sockaddr_in stClient1;
15 unsigned char ucBuff[250];
16
17 isock = socket(AF_INET,SOCK_STREAM,0);
18
19 if(isock == -1)
20 {
21 perror("isock() : ");
22
23 return -1;
24 }
25
26 staddr.sin_family = AF_INET;
27 staddr.sin_port = htons(PORT);
28 // 각자다른 포트번호를 가진다. (출석번호)
29 staddr.sin_addr.s_addr = inet_addr("192.168.10.250");
30
31
32 iret = bind(isock,((struct sockaddr *)(&staddr)),sizeof(staddr));
33 // bind(소켓번호, 구조체주소(&로 캐스팅/서버의주소)
34 // 내주소와 소켓을 결합시킬 때에 쓰는 함수를 bind라 한다.
35
36 if(iret == -1)
37 {
38 perror("bind() : ");
39
40 close(isock);
41
42 return 0;
43 }
44
45
46 iret = listen(isock,5);
47
48
49 if(iret == -1)
50 {
51 perror("listen() : ");
52 close(isock);
53
54 return 0;
55 }
56
57 uisize = sizeof(stClient1);
58 iClient1 = accept(isock,(struct sockaddr *) &stClient1, &uisize);
59 // accept가 socket을 만들어낸다 socket을 내부적으로 가지고있다.
60 // return 값도 socket과 같음. accept가 리턴되면 소켓이 만들어진다.
61 // 새로운 소켓을 저장할만한 변수를하나 새로 만들어야함. = iClient
62
63 if(iClient1 == -1)
64 {
65 perror("listen() : ");
66 close(isock);
67
68 return 0;
69 }
70
71 printf("%d\n",isock);
72 printf("%d\n",iClient1);
73
74 /*-----------------------Write-------------------------*/
75
76 write(iClient1,"Welcome",7);
77
78 /*------------------------Read-------------------------*/
79 iret = read(iClient1,ucBuff,sizeof(ucBuff));
80 ucBuff[iret] = 0;
81
82 printf("%s \n",ucBuff);
83 /*---------------------Read End------------------------*/
84
85 //************************************************************//
86 iret = read(iClient1,ucBuff,sizeof(ucBuff));
87 ucBuff[iret] = 0;
88
89 printf("%s \n",ucBuff);
90 //************************************************************//
91
92 close(isock);
93 close(iClient1);
94
95 return 0;
96 }
|
|
-> //********//의 사이 85~90
client에서 write로 썼던 정보들을 read로 읽고 출력하고있다.

|
1. 먼저 접속할 server를 열어준다.
2. client로 server에 접속한다.
<────────> Hello와 Welcome 각각의 read와 write값이 써진다.

//*****//의 사이에있던 정보들을 시험한결과.
read(1,...,...); 으로 키보드의 입력값을 받아와 write하는게 성공적으로 작동되었다.
client에서 키보드값을 쓰면 server에서 write한다.
->dos에서 파일을 ftp로 전송하는 법
ftp 192.168.10.250
아이디
비밀번호
bin
보낼 파일의 이름과 확장자.
->멀티 프로세스
ㄴ...
->멀티 쓰레드
ㄴ...
->select 함수
ㄴ...
|