0 | 3 | (저자 서문 13번째 줄) 스월해집니다. -> 수월해집니다. | 2011-04-26 | 1 |
1 | 31 | (1장 31페이지 Section2 2번째 줄) "바로 이었다." 삭제 | 2011-03-19 | 1 |
1 | 41 | (41페이지) OSI 7계층/OSI 4계층 => OSI 7계층, TCP/IP 4계층 | 2011-05-11 | 1 |
1 | 46 | (46페이지) ISO 4개 계층 => TCP/IP 4계층 | 2011-05-11 | 1 |
4 | 77 | (77페이지) 여러분은 네트워크과 네트워크 =>여러분은 네트워크와 네트워크 | 2011-05-12 | 1 |
4 | 89 | (4장 89페이지 최하단에서 2번째줄...) blind 함수는 대략... => bind 함수는 대략... | 2011-03-19 | 1 |
4 | 94 | (4장 1부 94쪽 셋째줄) 93쪽과 94쪽에 걸친 예제를 다음과 같이 수정합니다.
struct sockaddr_in client_sockaddr int client_sockfd; int client_addr_size;
while(1) { client_addr_size = sizeof( client_addr); client_sockfd = accept(sockfd, (struct sockaddr *)&client_sockaddr), &client_addr_size);
if (client_sockfd == -1) { // 에러 처리 } else { // client_sockfd를 이용해서 통신을 한다. } } | 2011-11-20 | 2 |
4 | 95 | (4장 1부 95쪽 6줄) 연결 소켓을 반환하는 bind =>연결 소켓을 반환하는 accept | 2011-11-20 | 2 |
4 | 95 | (4장 1부 95쪽 예제 코드) if ((sockfd = socket(... => if ((server_sockfd(...
| 2011-11-21 | 2 |
4 | 95 | (4장 95페이지) sockfd = socket(AF_INET, SOCK_STREAM, 0); <= 삭제
serveraddr.sin_addr.s_addr = inet_addr("218.234.19.87"); => serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1"); | 2011-03-19 | 1 |
4 | 96 | (96페이지 Section7 1번째 줄) 클라이언트가 Connect 함수로.. => 클라이언트가 connect 함수로.. | 2011-03-19 | 1 |
4 | 97 | (4장 1부 97쪽 그림) 그림 맨 오른쪽
read() => write()
write() => read() | 2011-11-21 | 2 |
4 | 99 | (4장 1부 99쪽 중간 예제 코드) struct user_info; => struct user_info mydata; | 2011-11-21 | 2 |
4 | 100 | (4장 1부 100쪽 여기서 잠깐 맨마지막 문단) strcpy 함수를 쓰지 않고 strcpy 함수를 쓰도록 =>strcpy 함수를 쓰지 않고 strncpy 함수를 쓰도록 | 2011-11-21 | 2 |
4 | 102 | (1부 4장 102쪽 26라인) "127.0.01" => "127.0.0.1" | 2011-11-25 | 2 |
4 | 102 | (4장 102페이지 24번째 줄) server_sockfd=socket(AF_INET, SOCK_STREAM, 0); <== 삭제 | 2011-05-17 | 1 |
4 | 105 | (4장 105페이지 echo_server.c) #include <unistd.h> 추가 | 2011-05-18 | 1 |
4 | 107 | (4장 107 페이지) [실행결과] echo_server -> [실행결과] echo_server 3500 | 2011-05-18 | 1 |
4 | 110 | (1부 4장 마지막줄) buffer[i++]=' '; =>buffer[i++]=' ' | 2011-11-27 | 2 |
4 | 110 | (110페이지) MAKEWORD(2, 0) => MAKEWORD(2, 2) | 2011-05-12 | 1 |
4 | 113 | (1부 4장 코드라인:36) if(SOCKET_ERROR == listen(listen_s,5) == SOCKET_ERROR) =>if(listen(listen_s,5) == SOCKET_ERROR) | 2011-11-27 | 2 |
4 | 113 | (4장. echo_server_win.c) 001 #include <winsock2.h> 002 #include <stdio.h> 003 004 #define MAX_PACKETLEN 1024 005 #define PORT 3500 006 007 int main() 008 { 009 WSADATA wsaData; 010 SOCKET listen_s, client_s; 011 struct sockaddr_in server_addr, client_addr; 012 char szReceiveBuffer[MAX_PACKETLEN]; 013 int readn, writen; 014 int len; 015 016 if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0) 017 { 018 return 1; 019 } 020 listen_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 021 if(listen_s == INVALID_SOCKET) 022 { 023 return 1; 024 } 025 026 ZeroMemory(&server_addr, sizeof(struct sockaddr_in)); 027 028 server_addr.sin_family = PF_INET; 029 server_addr.sin_port = htons(PORT); 030 server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 031 032 if(bind(listen_s, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) == SOCKET_ERROR) 033 { 034 return 0; 035 } 036 if(listen(listen_s, 5) == SOCKET_ERROR) 037 { 038 return 0; 039 } 040 041 042 while(1) 043 { 044 ZeroMemory(&client_addr, sizeof(struct sockaddr_in)); 045 len = sizeof(struct sockaddr_in); 046 client_s = accept(listen_s, (struct sockaddr *)&client_addr, &len); 047 readn = recv(client_s, szReceiveBuffer, MAX_PACKETLEN, 0); 048 if(readn > 0) 049 { 050 writen = send(client_s, szReceiveBuffer, readn, 0); 051 } 052 closesocket(client_s); 053 } 054 closesocket(listen_s); 055 WSACleanup(); 056 return 0; 057 } 058
5. accept 함수로 기다릴 포트번호를 3500으로 정의한다.
16. WSAStartup 함수로 윈속을 로딩한다.
42 ~ 53. accept 함수로 클라이언트를 기다린다. 만약 연결된다면 recv함수로 데이터를 읽고 send함수로 클라이언트에 재 전송한다. 데이터 전송 후 closesocket 함수를 호출해서 클라이언트 연결을 끊는다. | 2011-05-13 | 2 |
5 | 123 | (123페이지 예제 stdin_out.c) printf('Input Your Message : n'); => printf("Input Your Message : n"); | 2011-03-19 | 1 |
5 | 126 | (126페이지 하단 소스) if ((fd = open("mydata.txt", O_RDONLY | O_CREATE... => if ((fd = open("mydata.txt", O_WRONLY | O_CREATE... | 2011-03-19 | 1 |
5 | 128 | (1부 5장 표 두번째 행) S_RIWXU => S_IRWXU | 2011-11-27 | 2 |
5 | 129 | (1부 5장 129쪽) S_RIWXU | S_IRGRP => S_IRWXU | S_IRGRP | 2011-11-27 | 2 |
5 | 136 | (1부 5장 136쪽 [실행 결과]) ./mycopy mycopy.c mycopy.c.bac => ./mycopy mycopy.c mycopy.c.bak | 2011-11-28 | 2 |
6 | 139 | (139페이지 하단) "바이트를 읽는 순서가 CPU마다 다룰 수 있다." => "바이트를 읽는 순서가 CPU마다 다를 수 있다." | 2011-03-19 | 1 |
7 | 153 | (1부 7장 153쪽 두번째 그림) 16,851,375 => 16,777,216 | 2011-12-01 | 2 |
7 | 153 | (1부 7장 153 표) E클래스 시작주소 220.0.0.0 => 240.0.0.0 | 2011-12-01 | 2 |
7 | 155 | (1부 7장 155쪽) --7번째 라인 설명 ntonl 함수로 마스크를 => htonl 함수로 마스크를
--35번째 라인 설명 Ad 연산을 해야 => AND 연산을 해야 | 2011-12-02 | 2 |
7 | 161 | (1부 7장 161쪽 하단 오른쪽 그림) system32/etc/hots =>system32/drivers/etc/hosts | 2011-12-02 | 2 |
7 | 162 | (1부 7장 162쪽) 3번 설명 hots => hosts | 2011-12-02 | 2 |
7 | 170 | (Page 170) [실행결과] >namelookup.exe Host Name : www.hanb.co.kr 218.237.65.4 | 2011-05-11 | 1 |
8 | 177 | (177페이지 그림 바로 밑줄) MYU가 500바이트인... => MTU가 500바이트인... | 2011-03-21 | 1 |
8 | 183 | (1부 8장 183쪽) recv함수와 recv함수와 같은 => recv함수와 send함수와 같은 | 2011-12-03 | 2 |
8 | 183 | (182페이지 그림 183페이지 설명) 280으로 설정되었다고 가정한다. => 288으로 설정되었다고 가정한다. | 2011-03-21 | 1 |
8 | 186 | (1부 8장 186쪽 첫째줄) char message256={0x00,}; ==> char message[256]={0x00,};
char *data = 'hello worldn'; ==> char *data = "hello worldn"; | 2011-12-03 | 2 |
8 | 192 | (1부 8장 192쪽~193쪽) 모든 perror()함수 호출 부분 perror('Error '); ==> perror("Error ");
for { ==> for(;;) { | 2011-12-03 | 2 |
8 | 193 | (8장 193페이지.) 68번 줄: left_num = ntohs(rdata.left_num); => left_num = ntohl(rdata.left_nun);
69번 줄: right_num = ntohs(rdata.right_num); => right_num = ntohl(rdata.right_nun); | 2011-06-28 | 1 |
8 | 193 | (8장 193페이지 95라인) rdata.error = htons(cal_result); => rdata.error = htons(rdata.error); | 2011-03-21 | 1 |
8 | 197 | (1부 8장 197쪽) send(s,(void *)&sdata,len,0) ==> send(s,(char *)&sdata,len,0)
recv(s,(void *)&sdata,len,0) ==>> recv(s,(char *)&sdata,len,0) | 2011-12-03 | 2 |
10 | 232 | (232페이지 예제) 예제에서
22행 printf("Im parent process %dn", getpid()); => printf("Im Child process %dn", getpid());
32행 printf("Im Child process %dn", getpid()); => printf("Im parent process %dn", getpid()); | 2011-07-01 | 1 |
12 | 317 | (317페이지 밑에서 6번째줄) Naggle => Nagle
19, 317, 515, 525, 526, 721 페이지에서도 동일하게 적용됩니다. | 2011-03-23 | 1 |
12 | 333 | (2부 12장 333쪽 첫째줄) recv, send, recv, recvfrom => recv, send, sendto, recvfrom | 2011-12-18 | 2 |
12 | 335 | (2부 12장 335쪽,338쪽 예제) 335쪽 예제:winsock_server.c =>예제:winsock_oob_client.c
338쪽 예제:winsock_oob_client.c =>예제:winsock_oob_server.c | 2011-12-18 | 2 |
|