구)홈페이지 오탈자 보기
뇌를 자극하는 TCP/IP 소켓 프로그래밍

 

페이지오탈자 내용등록일
03

(저자 서문 13번째 줄)

스월해집니다. -> 수월해집니다.

2011-04-261
131

(1장 31페이지 Section2 2번째 줄)

"바로 이었다." 삭제

2011-03-191
141

(41페이지)

OSI 7계층/OSI 4계층
=> OSI 7계층, TCP/IP 4계층

2011-05-111
146

(46페이지)

ISO 4개 계층 
=> TCP/IP 4계층

2011-05-111
477

(77페이지)

여러분은 네트워크과 네트워크
=>여러분은 네트워크와 네트워크

2011-05-121
489

(4장 89페이지 최하단에서 2번째줄...)

blind 함수는 대략...
=> bind 함수는 대략...

2011-03-191
494

(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-202
495

(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-191
495

(4장 1부 95쪽 6줄)

연결 소켓을 반환하는 bind
=>연결 소켓을 반환하는 accept

2011-11-202
495

(4장 1부 95쪽 예제 코드)

if ((sockfd = socket(...
=> if ((server_sockfd(...

2011-11-212
496

(96페이지 Section7 1번째 줄)

클라이언트가 Connect 함수로..
=> 클라이언트가 connect 함수로..

2011-03-191
497

(4장 1부 97쪽 그림)

그림 맨 오른쪽

read()  
=> write()

write()  
=> read()

2011-11-212
499

(4장 1부 99쪽 중간 예제 코드)

struct user_info;
=> struct user_info mydata;

2011-11-212
4100

(4장 1부 100쪽 여기서 잠깐 맨마지막 문단)

strcpy 함수를 쓰지 않고 strcpy 함수를 쓰도록
=>strcpy 함수를 쓰지 않고 strncpy 함수를 쓰도록

2011-11-212
4102

(4장 102페이지 24번째 줄)

server_sockfd=socket(AF_INET, SOCK_STREAM, 0); <== 삭제

2011-05-171
4102

(1부 4장 102쪽 26라인)

"127.0.01" => "127.0.0.1"

2011-11-252
4105

(4장 105페이지 echo_server.c)

#include <unistd.h> 추가

2011-05-181
4107

(4장 107 페이지)

[실행결과] echo_server
-> [실행결과] echo_server 3500

2011-05-181
4110

(110페이지)

MAKEWORD(2, 0)
=> MAKEWORD(2, 2)

2011-05-121
4110

(1부 4장 마지막줄)

buffer[i++]=' ';
=>buffer[i++]=''

2011-11-272
4113

(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-132
4113

(1부 4장 코드라인:36)

if(SOCKET_ERROR == listen(listen_s,5) == SOCKET_ERROR)
=>if(listen(listen_s,5) == SOCKET_ERROR)

2011-11-272
5123

(123페이지 예제 stdin_out.c)

printf('Input Your Message : n');
=> printf("Input Your Message : n");

2011-03-191
5126

(126페이지 하단 소스)

if ((fd = open("mydata.txt", O_RDONLY | O_CREATE...
=> if ((fd = open("mydata.txt", O_WRONLY | O_CREATE...

2011-03-191
5128

(1부 5장 표 두번째 행)

S_RIWXU => S_IRWXU

2011-11-272
5129

(1부 5장 129쪽)

S_RIWXU | S_IRGRP
=> S_IRWXU | S_IRGRP

2011-11-272
5136

(1부 5장 136쪽 [실행 결과])

./mycopy mycopy.c mycopy.c.bac
=> ./mycopy mycopy.c mycopy.c.bak

2011-11-282
6139

(139페이지 하단)

"바이트를 읽는 순서가 CPU마다 다룰 수 있다."
=> "바이트를 읽는 순서가 CPU마다 다를 수 있다."

2011-03-191
7153

(1부 7장 153쪽 두번째 그림)

16,851,375 => 16,777,216

2011-12-012
7153

(1부 7장 153 표)

E클래스 시작주소
220.0.0.0 => 240.0.0.0

2011-12-012
7155

(1부 7장 155쪽)

--7번째 라인 설명
ntonl 함수로 마스크를
=> htonl 함수로 마스크를

--35번째 라인 설명
Ad 연산을 해야
=> AND 연산을 해야

2011-12-022
7161

(1부 7장 161쪽 하단 오른쪽 그림)

system32/etc/hots
=>system32/drivers/etc/hosts

2011-12-022
7162

(1부 7장 162쪽)

3번 설명
hots => hosts

2011-12-022
7170

(Page 170)

[실행결과]
>namelookup.exe
Host Name : www.hanb.co.kr
218.237.65.4

2011-05-111
8177

(177페이지 그림 바로 밑줄)

MYU가 500바이트인...
=> MTU가 500바이트인...

2011-03-211
8183

(182페이지 그림 183페이지 설명)

280으로 설정되었다고 가정한다.
=> 288으로 설정되었다고 가정한다.

2011-03-211
8183

(1부 8장 183쪽)

recv함수와 recv함수와 같은
=> recv함수와 send함수와 같은

2011-12-032
8186

(1부 8장 186쪽 첫째줄)

char message256={0x00,};
==>
char message[256]={0x00,};

char *data = 'hello worldn';
==>
char *data = "hello worldn";

2011-12-032
8192

(1부 8장 192쪽~193쪽)

모든 perror()함수 호출 부분
perror('Error '); ==> perror("Error ");

for
{
==>
for(;;)
{

2011-12-032
8193

(8장 193페이지 95라인)

rdata.error = htons(cal_result);
=> rdata.error = htons(rdata.error);

2011-03-211
8193

(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-281
8197

(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-032
10232

(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-011
12317

(317페이지 밑에서 6번째줄)

Naggle
=> Nagle

19, 317, 515, 525, 526, 721 페이지에서도 동일하게 적용됩니다.

2011-03-231
12333

(2부 12장 333쪽 첫째줄)

recv, send, recv, recvfrom
=> recv, send, sendto, recvfrom

2011-12-182
12335

(2부 12장 335쪽,338쪽 예제)

335쪽
예제:winsock_server.c
=>예제:winsock_oob_client.c

338쪽
예제:winsock_oob_client.c
=>예제:winsock_oob_server.c

2011-12-182