2008년 7월 29일 화요일

BIND 셋팅

* /etc/named.conf 설정

more..



##################################################################
/etc/named.rfc1912.zones 설정
##################################################################

more..



##################################################################
/var/named/chroot/var/named/zone-lovecoco.net 설정
##################################################################

more..

파워 자체로 이상 여부를 점검하는 방법

PC에 사용되는 대부분 파워서플라이는 “ATX규격” (ATX12V Design Guide)에 따라 설계 합니다.
이 점검 방법은 파워 DC 출력의 이상 여부를 '내부 쿨링 팬의 동작'으로 확인하는 임시 방법 입니다. 

파워 자체 점검 방법은 파워의 “메인 출력 커넥타, 24 핀” 가운데 “녹색선 (16번 핀), PS_On# “ 단자를 바로 옆에 위치한 “검정색선 (17번 핀), Ground “ 단자와 “클립” 또는 “철사” 등을 사용하여 서로 쇼트를 시킨 상태에서 AC 전원을 인가하고, 파워 후면의 스위치를 On 시키면, 정상적인 파워의 경우 쿨링 팬이 동작을 하게 됩니다. 만약 쿨링 팬이 동작을 하지 않는다면 파워에 이상이 있으므로 A/S 신청을 해야 합니다.

[ 일부 파워 모델의 경우(예, PS-325Plus / PS-400AP 등)에는 "메인출력 커넥타, 24핀" 배선 색상이 다릅니다. 따라서 이 때는 "회색선 (16번 핀), 단자 와 검정색선 (17번 핀) 단자"를 사용하며, 테스트 방법은 위와 같습니다.]

* 파워 자체 점검 방법 정리

메인커넥타 “녹색선과 검정색선의 쇼트” --> AC 전원을 파워에 연결 --> 파워 후면의 스위치를 On -->
파워 쿨링 팬 회전 ( 파워 정상 확인 ) / 파워 쿨링 팬 비 회전 ( 파워 비정상 )


사용자 삽입 이미지


2008년 7월 28일 월요일

Server 2008 초기 설정

원문 출처 : http://blog.naver.com/code98/90029402442

실행창(RUN)열기 -> 윈도우키 + R
명령어 입력.


1. CTRL+ALT+DEL 누르지 않고 윈도로그온
실행창에 gpedit.msc 입력
Computr Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options
'Interactive logon: Do not require CTRL+ALT+DEL' Disabled -> Enabled

2. 시스템 종료시 이벤트 메시지 보이지 않게 하기
Computr Configuration -> Administrative Templates -> System
'Display Shutdown Event Tracker' Not Configured -> Disabled

3. 테마 및 사운드 활성화
실행창에 services.msc 입력
Themes : Disabled -> Automatic
Windows Audio : Manual -> Automatic

--------------------------------------------------------------------------------------

3. 인터넷익스플로러 보안설정
Start -> Computer 우클릭 -> Manage
Server Summary -> Security Infomation -> Configure IE ESC
Administrators : off
Users : off

--------------------------------------------------------------------------------------

4. Start -> Computer 우클릭 -> Properties -> Advanced system settings

'Performance'

-Visual Effects
Adjust for best appearance -> OK
-Advanced
Processor scheduling
Programs 선택
-Data Execution Prevention'
'Turn on DEP for essential Windows programs and services only' 선택

5. 'Startup and Recovery'
Settings
System failure
Write debugging information : Small memory dump (64KB) -> OK

--------------------------------------------------------------------------------------

6. 패스워드 입력하지 않고 윈도 로그온
실행창에 control userpasswords2 입력
'Users'
Users must enter a user name and password to use this computer 체크해제
체크해제 하기 전에 네모칸 안에 Administrator를 더블클릭 하면 이름을 바꾸기 가능 .
체크해제 후 OK.
패스워드 입력란에 처음 로그인 했을시 입력했던 패스워드를 입력.
밑 칸 한번더 입력.
OK.

재시작...

7. 에어로 설정
바탕화면의 내컴퓨터 아이콘에 대고 오른클릭을 하신후.
'Manage'를 선택합니다.
Server Manager가 뜨면.
스크롤로 내리셔서 'Feature Summary' 
데스크톱 경헙 추가 & 재부팅

Windows Server 2008 Activation

* 아래 글의 원문 : http://mint770.tistory.com/12

Windows Server 2008의 activation crack 이 몇 종 나와있는데
크랙하지 않고도 인증을 피해가는 법이 있어 적용해보았다.

해보니 참 어이없지만
인증 관련된 파일들을 삭제하는 것만으로도
인증을 우회할 수 있었다.

제품 키 입력 시
Serial Number을 입력하지 않고 진행
"온라인일 때 자동으로 정품인증" 체크 해제

Windows Server 2008 설치 완료 후
SL UI Notification Service를 중지하고, 사용 안 함 상태로 변경

파일 삭제 가능하도록 변경
C:\Windows\System32의
SLLUA.exe
SLUI.exe
SLLUI.ddl
각 파일의 등록정보 > 보안탭 > 고급 > 소유자탭
소유자를 Administrator로 변경

각 파일의 등록정보 > 보안탭 > Administrator 유저 선택
모든 권한 부여

파일 삭제
파일을 삭제하거나 이름을 바꾸어 백업

테스트를 위해 날짜를 미래로 변경

Reboot

PC Off할 때 바탕화면 우측 하단에
"이 윈도우는 정품이 아닙니다"라는 메시지가 나타나고,
컴퓨터 속성에서
"오늘 정품 인증을 받아야 합니다. 지금 정품 인증을 받으십시오"
라고 나오지만,

실제로는 expire되지도 않고
역할 설치 및 Windows Update에도 제약이 없고
로그인 화면부터 막힌다던가 하는 일이 없다.

이상한 프로세스 Groove 없애기;...

언젠가부터 알지못하는 프로세스 GrooveMonitor.exe 가 떴다.
레지스트리에서 삭제해도 ;;; 마치 스파이 웨어처럼 안없어지고..

원문 출처  : http://kita.egloos.com/1971228

Groove는 Microsoft Office 2007의 일부분이다.
(그루브.... 80년대 철부지 힙합그룹 이름같다.)

이것이 하는 일은 폴더 싱크로나이저로 알려져있고, 이것의 백그라운드 실행파일인 GrooveMonitor.exe를 구글에서 검색해보면  '어떻게 하면 이 기분나쁜 녀석을 없앨 수 있냐'라는 질문이 많다.

시스템 시작시 GrooveMonitor.exe가 자동시작되지 않도록 레지스트리를 직접 바꿔놓더라도, 마치 스파이웨어처럼 HKCU 레지스트리에 Groove가 다시 등록되어 시스템 시작시 자동실행된다.

이곳 저곳 검색해본 결과, Groove의 삭제방법은:

  • 일단, 레지스트리를 손대봤자 아무 소용 없다.
  • 제어판->프로그램 추가삭제->오피스 2007 엔터프라이즈->변경
    에 들어가서 Groove 컴포넌트를 삭제하면 된다.

답은 정공법이었다...

2008년 7월 22일 화요일

Fedora 7 이상 버젼을 DVD 없이 CD로만 설치하는 방법

DVD는 2.5G가 넘지만.. CD한장 100메가도 안되는 용량만 가지고 설치할수 있다. 이때 당연히 그 외의 파일은 인터넷에서 가져온다~ 즉 인터넷이 연결되야 한다^^

우선 다음의 주소에서 "
F-7-i386-rescuecd.iso" 이 파일을 받아 CD로 굽는다.
http://ftp.kaist.ac.kr/pub/fedora/linux/releases/7/Fedora/i386/iso/

구운  CD를 넣고 부팅한후,

"Install or upgrade an existing system"선택
사용자 삽입 이미지


그리고 그 후에는 적당히 넘어간다.
한국어 선택후.. 적당이 넘어가다가

Installation Method 항목에서 "FTP"를 선택한다.

사용자 삽입 이미지

이후 자신의 네트웍 환경에 맞게 셋팅한다.
나는 고정아이피에 IPV4를 사용하기 때문에 다음과 같이 했당.

사용자 삽입 이미지

이후 내 PC에 IP와 게이트웨이, 도메인 서버등을 설정해준다.

(IP는 보안상 이유로 블럭처리)
이렇게 인터넷이 가능하게끔 네트웍을 설정해주고
사용자 삽입 이미지

이후 FTP주소와 폴더를 입력하라고 하는데..
FTP Site name  : ftp.kaist.ac.kr
Fedora Directory : pub/fedora/linux/releases/7/Fedora/i386/os/

사용자 삽입 이미지


다음 넘어가면 CD 찾았다고 하는데;
CD는 SKIP 하고 ~~~ 넘어간다.

그다음은 평소 설치대로 설치하면 된다.
설치하다보면 "설치를 준비중입니다. 이 단계는 수분에서 수십분이 걸릴 수 있습니다" 라는 메세지가 나오는데;;; 거의 1-2시간 걸린답;; --^

인터넷에서 다운받아 설치해서 그런지 속도는 DVD로 할때보다 훨씬 더 걸리지만 (3시간?).. DVD가 없는 사람한테는 어째튼  편리하다.
DVD 드라이버를 떼서 연결했다 설치하고 다시 떼서 원래데로 붙여놓는 그 노력보다.. 는 간단하기 때문이다.


APACHE에서 PHP 파일을 인식하지 못할때

/usr/local/apache/conf/httpd.conf
파일중..
아래부분에 빨강색 부분을 추가한다.

<IfModule mime_module>
    #
    # TypesConfig points to the file containing the list of mappings from
    # filename extension to MIME-type.
    #
    TypesConfig conf/mime.types

    #
    # AddType allows you to add to or override the MIME configuration
    # file specified in TypesConfig for specific file types.
    #
    #AddType application/x-gzip .tgz
    #
    # AddEncoding allows you to have certain browsers uncompress
    # information on the fly. Note: Not all browsers support this.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    #
    # If the AddEncoding directives above are commented-out, then you
    # probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    # And for PHP 4.x, use:
    AddType application/x-httpd-php .php .php3 .inc .ph .htm .html
    AddType application/x-httpd-php-source .phps

    #
    # AddHandler allows you to map certain file extensions to "handlers":
    # actions unrelated to filetype. These can be either built into the server
    # or added with the Action directive (see below)
    #
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script .cgi .pl

    # For files that include their own HTTP headers:
    #AddHandler send-as-is asis

    # For server-parsed imagemap files:
    #AddHandler imap-file map

    # For type maps (negotiated resources):
    #AddHandler type-map var

    #
    # Filters allow you to process content before it is sent to the client.
    #
    # To parse .shtml files for server-side includes (SSI):
    # (You will also need to add "Includes" to the "Options" directive.)
    #
    #AddType text/html .shtml
    #AddOutputFilter INCLUDES .shtml
</IfModule>

2008년 7월 19일 토요일

ProFTPd 설치 및 실행시... 접속이 지연되는 현상

Proftpd 설치

다음의 주소에서 다운로드

#
ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.2rc1.tar.gz


Proftpd 실행시 Client 접속시 접속이 지연되는 현상.
이는 Proftpd 가 Client 의 접속요구를 받으면, 역방형 DNS를 확인하기 때문이다

proftpd.conf 에 다음의 두줄을 추가

UseReverseDNS                   off
IdentLookups                    off

2008년 7월 16일 수요일

ZBXE 첫 모임~ 참석해야지~

사용자 삽입 이미지

3번 주제가 무척 땡김;
그래서 참석! 결정..

사실 몇몇 홈페이지를 ZBXe를 써서 만들어봤는데... 기존의 보던 PHP 소스와는 많이 달라 약간 헤맨다는 ㅠㅠ 그래서 2번도 궁굼~~

2008년 7월 15일 화요일

LINUX의 한글문제로 인해.. 영문으로 지정

LINUX에 Fedora Core 3? 부터인가 유니코드를 사용한다.
따라서 기존의 EUC_KR과 충돌하여.. 깨지는데 이럴때는 그냥 영문판으로 지정해서 쓴다

파일 : /etc/sysconfig/i18n

LANG="en_US"
#LANG="ko_KR.UTF-8"
SUPPORTED="en_us:euc_kr"
SYSFONT="latarcyrheb-sun16"

내가 사용하는 APM 셋팅 옵션

아래 명령어 다운로드
- Command : wget
http://www.lovecoco.net/dataout/userdata/command.txt



MYSQL
- DownLoad : wget
http://www.lovecoco.net/dataout/userdata/mysql-5.1.22-rc.tar

./configure --prefix=/usr/local/mysql --with-charset=euckr --with-unix-socket-path=/usr/local/mysql/mysql.socket --with-mysqld-user=mysql


APACHE
- DownLoad : wget
http://www.lovecoco.net/dataout/userdata/http-2.2.0.tar

./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-modules=so --with-mpm=worker


PHP
- DownLoad : wget
http://www.lovecoco.net/dataout/userdata/php-5.2.4.tar

WEBDB
- DownLoad : wget
http://www.lovecoco.net/dataout/userdata/webdb.tar


./configure --prefix=/usr/local/php --with-exec-dir=/usr/bin --with-apxs2=/usr/local/apache/bin/apxs --with-apache-install=/usr/local/apache --with-mysql=/usr/local/mysql --with-config-file-path=/etc --disable-debug --enable-safe-mode --enable-track-vars --enable-sockets --with-png-dir=/usr/lib --with-freetype-dir=/usr/include/freetype2 --with-mod_charset --with-charset=euc_kr --with-xml --with-language=korean --enable-mailparse --enable-calender --enable-sysvsem=yes --enable-sysvshm=yes --enable-ftp --enable-magic-quotes --enable-gd-native-ttf --enable-versioning --enable-url-includes --enable-trans-id --enable-inline-optimization --with-iconv --enable-mbstring --enable-mbregex --with-gd --with-ttf --with-gettext --enable-sigchild --enable-module=so   --enable-versioning --enable-url-includes --enable-trans-id --enable-inline-optimization --enable-bcmath --with-jpeg --with-png --with-zlib

make all -> make test 를 실행해야함



# FTP Server Start
/usr/local/proftpd/sbin/proftpd

# MySQL Server Start
/usr/local/mysql/bin/mysqld_safe --user=mysql --language=korean --old-passwords &

# Apache Server Start
/usr/local/apache/bin/apachectl start

2008년 7월 14일 월요일

비트필드 구조체란?

질문: 비트필드 구조체란? nasanjin / 2007-10-18 18:24

비트필드 구조체란 무엇이며?
어떠한 형태로 사용하며????
사용예제 하나 보여주시고요;;;
사용하는 경우는 어떤 경우인지??
사용하게 되면 좋은 이점은 무엇이며? 단점은 무엇입니가?
메모리 공간은 어떤방식으로 할당하는지???

답변: re: 비트필드 구조체란? keyseek / 2007-10-18 22:41

구조체 멤버를 비트단위로 선언할 수 있는 구조체 입니다.

struct st
{
   unsigned int a : 2;
   unsigned int b : 3;
};

이런 식으로 표현합니다. 즉 일반 구조체의 멤버 산언과 동일하나 멤버명뒤에 : n 으로 비트수를 지정합니다.
예제? 위에 선언한 구조체를 이용하겠습니다.

struct st x = {1,5};

이렇게 하면 x.a는 1, x.b는 5 가 들어갑니다.
즉, a는 2비트인데 1이 들어가므로 2진수로 보면 01 이 들어가게 됩니다.
b는 3비트인데 5가 들어 가므로 2진수로 보면 101 이 들어가게 됩니다
즉, 일반 구조체 사용하듯이 사용하면 되는 겁니다.
사용하는 경우? 뭐 다양하게 사용되겠지만
flag선언때 많이 사용합니다. (이걸 어떻게 설명드리지요?)
또한 어떤 데이터 스트림(헤더정도 등)의 parsing에도 많이 쓰입니다.
예를들어 총 4바이트 헤더에서 처음 3비트는 어떤 정보이고 다음 8비트는 뭐고
그다음 몇비트는 뭐고 하는 식으로 비트들로 필드가 구분되어 있다면
이들 필드들만 억세스 하기 위하여 비트필드를 선언하여 사용합니다.

장점? 아무래도 변수를 비트로 사용하니까 메모리가 줄어들겠죠
예를들어 int a = YES; a = NO; (여기서 YES, NO는 1과 0으로 사전 define된것으로 가정)
이렇게 a가 사용된다면 a는 4바이트 변수인데 실제 저장하는 값은 0 아니면 1 혹은
YES, NO 등 입니다. 따라서 이런 경우는 1비트면 충분하지요
만약 이런식의 변수들이 여러개 있다면 이들을 묶어서 하나의 구조체로 만들고
그 내부 필드를 비트필드로 하는 거지요 그럼 메모리 총량이 감소되어 절약이 가능합니다.

단점? 전체 32비트 메모리(비트필드 이지만 구조체의 최소크기는 int가 됨)에서
특정 비트들만 값을 변경하면 즉 위의 구조체에서 x.a = 1을 하면 실제 이 코드는
1을 그냥 a에 대입하는 것이 아니라 실제 코드는 (x & 3  | 1) 로 처리되어 비트 연산을
수행하게 됩니다. 결국 메모리는 아끼지만 속도는 느려지는 거지요

메모리는 먼저 선언된 멤버가 낮은비트(0번지크)부터 채워집니다.
위의 구조체는 32비트(int)로 총 사이즈가 잡힙니다.

그 32비트에서 하위 두비트 0,1 비트는 a가 그 위의 3비트 3,4,5 비트는 b가 위치합니다.
나머지 비트들은 사용되지 않습니다.

이해 되실런지요?

널리 알려진 포트 번호 보기

 PC의 모든 포트는 제한이 없어 어떤 프로그램이라도 자유롭게 데이터를 주고 받을 수 있다. 제한이 없는 만큼 밖에서 PC를 공격하는 프로그램이 밀고 들어와도 막을 방법이 없다. 방화벽(Firewall)은 열린 포트를 막아 밖에서 나쁜 프로그램이 침입하지 못하도록 한다. 물론 방화벽이 모든 인터넷 서비스를 막으면 안되니까 80(웹), 21(FTP)번 포트같이 자주 쓰고 믿을 수 있는 포트는 열어 놓는다. 방화벽은 밖에서 들어오는 공격도 막지만 안에서 밖으로 데이터를 보내지 못하도록 막는 일도 해 네트워크 안의 정보가 밖으로 새는 것을 막아준다.
자주 쓰는 프로그램, 서비스의 포트 번호

  포트 포워딩을 하려면 인터넷 서비스, 소프트웨어가 쓰는 포트 번호를 알아야 한다. 사람들이 많이 쓰는 네트워크 서비스, 메신저, P2P 프로그램의 포트 번호를 정리한다.

  ▲ 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

  여기에 나오지 않은 프로그램의 포트 번호는 소프트웨어 제조사에 물어보면 알 수 있다. 몇몇 프로그램은 정해진 포트 번호를 쓰지 않고 사용자가 마음대로 정하는 메뉴를 둔다. 그런 프로그램을 쓴다면 포트 번호를 10,000번보다 높은 숫자로 정하는 것이 좋다. 이렇게 하면 다른 프로그램과 포트가 충돌하는 문제가 생기지 않는다.

 

 

 

 

 

첨부1) P2P 프로그램이 사용하는 네트워크 포트

Service Name Protocol Port Description
당나귀
TCP 4661 서버 접근 포트(변경가능)
4662 자료 전송 포트(변경가능)
4242  
UDP 4672  
4665  
iMash TCP 5000  
BitTorrent TCP 6881  
6889  
소리바다 v.2 UDP 22321 hello message, bye message 사용 포트
7674 mp3를 검색
7675 mp3파일을 보내는 사람
WINMX TCP 6699  
UDP 6257  
Direct-Connect TCP 411-412  
UDP 411-412  
KaZaA TCP 1214  
Guntella-Morpheus TCP 6346-6347  
UDP 6346-6347  
GuRuGuRu TCP 9292  
8282  
31200  
파일 구리 TCP 9493  
Madster-Aimster TCP 23172  
9922  
HotLine TCP 5497  
5498  
5500-5503  
UDP 5499  
V-Share TCP 8404  
Maniac TCP 2000  
UDP 2010  
TCP 2222  
MiRC TCP 6667 Default
6665-6670 변경
7000  
Shareshare TCP 6399  
UDP 6777  
Bluster UDP 41170  
GoToMyPc TCP 8200  
Napster TCP 6600-6699  
4444  
5555  
6666  
7777  
8888  
8875  
첨부2) 메신저 프로그램 사용 포트
Service Name Server Port Description
MSN
64.4.130.0/24
207.46.104.0/24
207.46.106.0/24
207.46.107.0/24
207.46.108.0/24
207.46.110.0/24
TCP 1863 ,80 1863접속 시도 후 차단 되면 80 접속 시도
TCP 6891-6900 파일 전송
UDP 6901 음성채팅
UDP1863,5190 Microsoft Network Messenger
   
Yahoo 216.136.233.152/32
216.136.233.153/32
216.136.175.144/32
216.136.224.143/32
66.163.173.203/32
216.136.233.133/32
216.136.233.148/32
66.163.173.201/32
216.136.224.213/32
TCP 5050,5101 5050 접속 시도 후 차단 되어 있으면 Port 계속 변경
   
TCP 5000-5001 음성채팅
   
   
TCP 5100 화상채팅
   
   
Nate On 203.226.253.75/32
203.226.253.135/32
203.226.253.82/32
TCP 5004-5010 기본 포트 5004-5010 접속 시도후 차단되어 있으면 Port를 계속 변경
TCP80,83,7003 웹 컨텐츠 및 문자 보내기
Daum 211.233.29.78/32 TCP 8062  
SayClub 211.233.47.20/32    
AOL   TCP 5190 AOL Instant Messenger Also used by: ICQ
UDP 4000 ICQ_locator
Dreamwize 211.39.128.236/32
211.39.128.184/32
TCP 10000  
버디버디   TCP 810  
TCP 940  
TCP 950  
케이친구   TCP 7979  
천리안   TCP 1420  
TCP4949, 8989 파일 송수신
ICQ   TCP 5190  
UIN   TCP 8080  
Genile   TCP 10000  

Winsock 컨트롤 사용

Winsock 컨트롤 사용

WinSock 컨트롤은 UDP(User Datagram Protocol)TCP(Transmission Control Protocol)을 사용하여 원격 장비에 연결하여 데이터를 교환할 수 있게 해줍니다. 이 두 프로토콜을 사용하여 클라이언트와 서버 응용 프로그램을 만들 수 있습니다. Timer 컨트롤과 마찬가지로 WinSock 컨트롤은 실행 모드에서 눈에 보이는 인터페이스를 가지고 있지 않습니다.

 

가능한 용도

중앙 서버로 보내기 전에 사용자 정보를 모으는 클라이언트 응용 프로그램을 작성합니다.

여러 사용자로부터의 데이터를 중앙으로 모으는 기능을 가진 서버 응용 프로그램을 작성합니다.

"chat" 응용 프로그램을 작성합니다.

 

프로토콜 선택

WinSock 컨트롤을 사용할 때 먼저 고려해야 할 것은 TCP를 사용할 것인지 UDP 프로토콜을 사용할 것인지를 결정하는 것입니다. 이 두 프로토콜의 가장 큰 차이점은 연결 상태입니다.

TCP 프로토콜 컨트롤은 연결에 기반을 둔 프로토콜이고 전화와 비슷합니다. 사용자는 진행을 하기 전에 반드시 연결을 수행해야 합니다.

UDP 프로토콜은 연결이 필요 없는 프로토콜이고 두 시스템간의 트랜잭션은 메모를 전달하는 것과 비슷합니다. 메시지는 한 시스템에서 다른 시스템으로 보내지지만 두 시스템 사이의 직접적인 연결은 없습니다. 나아가 개인이 보내는 최대 데이터 크기는 네트워크에 따라 정해집니다.

만드는 응용 프로그램의 특성은 일반적으로 어느 프로토콜을 선택해야 할지를 결정합니다. 다음은 적절한 프로토콜을 선택하는 것을 도와주는 몇 가지 질문이 있습니다.

데이터를 보내거나 받을 때 응용 프로그램이 서버나 클라이언트의 승인을 필요로 합니까? 그렇다면 TCP 프로토콜은 데이터를 보내거나 받기 전에 직접적인 연결을 필요로 합니다.

데이터가 이미지나 사운드 파일과 같이 아주 큽니까? 연결이 만들어지면 TCP 프로토콜은 이 연결을 유지하고 데이터의 통합성을 보장합니다. 그러나 이 연결은 더 많은 컴퓨터 자원을 사용하고 이것은 컴퓨터의 가격을 "비싸게" 합니다.

데이터가 간격을 두고 보내집니까 아니면 한번에 보냅니까? 예를 들어, 특정 작업이 완료되었을 때 지정한 컴퓨터에 알려주는 응용 프로그램을 만들 때는 UDP 프로토콜이 더 적절합니다. 또한 UDP 프로토콜은 작은 양의 데이터를 보내는데 더 적절합니다.

 

프로토콜 설정

응용 프로그램이 사용할 프로토콜을 설정하려면 속성 창의 디자인 모드에서 프로토콜을 누르고 sckTCPProtocol이나 sckUDPProtocol을 선택합니다. 또한 다음과 같이 코드에서 Protocol 속성을 설정할 수 있습니다.

Winsock1.Protocol = sckTCPProtocol

 

컴퓨터의 이름 결정

원격 시스템에 연결하려면 시스템의 IP 주소나 "친숙한 이름"을 알아야 합니다. IP 주소는 마침표로 구분된 세 자리 숫자의 시리즈입니다(xxx.xxx.xxx.xxx). 일반적으로 시스템의 친숙한 이름을 기억하는 것이 훨씬 쉽습니다.

 

내 컴퓨터 이름을 찾으려면

[작업 표시줄]에서 [시작]을 누릅니다.

[설정] 항목에서 [제어판]을 누릅니다.

[네트워크] 아이콘을 두 번 누릅니다.

[컴퓨터 확인] 탭을 누릅니다.

사용자 컴퓨터 이름은 [컴퓨터 이름] 상자에서 찾을 수 있습니다.

사용자 컴퓨터 이름을 찾았으면 RemoteHost 속성의 값으로 사용할 수 있습니다.

 

TCP 연결 기초

TCP 프로토콜을 사용하는 응용 프로그램을 작성할 때 먼저 응용 프로그램이 서버가 될지 클라이언트가 될지를 결정해야 합니다. 서버를 만드는 것은 지정한 포트에서 응용 프로그램이 "응답"하는 것을 의미합니다. 클라이언트가 연결 요청을 만들 때 서버는 요청을 받아들여서 연결을 완료할 수 있습니다. 연결이 완료되면 클라이언트와 서버는 서로 자유롭게 통신할 수 있습니다.

다음 단계를 실행하여 기본 서버를 만듭니다.

 

TCP 서버를 작성하려면

새 표준 EXE 프로젝트를 만듭니다.

기본 폼의 이름을 frmServer로 바꿉니다.

폼의 캡션을 "TCP 서버"로 바꿉니다.

폼에 Winsock 컨트롤을 만들고 그 이름을 tcpServer로 바꿉니다.

폼에 두 개의 TextBox 컨트롤을 추가합니다. 첫째 컨트롤의 이름은 txtSendData, 그리고 둘째 컨트롤의 이름은 txtOutput으로 정합니다.

아래 코드를 폼에 추가합니다.

 

Private Sub Form_Load()

' LocalPort 속성을 정수로 설정합니다.

' Listen 메서드를 불러옵니다.

tcpServer.LocalPort = 1001

tcpServer.Listen

frmClient.Show ' 클라이언트 폼을 보여줍니다.

End Sub

 

Private Sub tcpServer_ConnectionRequest _

(ByVal requestID As Long)

' 컨트롤의 상태가 닫혔는지 확인합니다. 닫히지 않았으면

' 새 연결을 받아들이기 전에 연결을 종료합니다.

If tcpServer.State <> sckClosed Then tcpServer.Close

' requestID 매개 변수를 사용하여 요청을 받아들입니다

tcpServer.Accept requestID

End Sub

 

Private Sub txtSendData_Change()

' txtSendData로 이름 지정된 TextBox 컨트롤은 전송할 데이터를 포함합니다. _

사용자가 입력란에 입력할 때마다 문자열이 SendData 메서드를 사용하여

전송됩니다.

tcpServer.SendData txtSendData.Text

End Sub

 

Private Sub tcpServer_DataArrival _

(ByVal bytesTotal As Long)

' 들어오는 데이터에 대한 변수를 선언합니다.

' GetData 메서드를 불러오고 txtOutput으로 이름이 지정된 TextBox Text _

속성을 데이터에 설정합니다.

Dim strData As String

tcpServer.GetData strData

txtOutput.Text = strData

End Sub

 

위의 프로서저는 간단한 서버 응용 프로그램을 작성합니다. 그러나 이 시나리오를 완성하려면 클라이언트 응용 프로그램도 만들어야 합니다.

 

TCP 클라이언트를 만드려면

프로젝트에 새 폼을 추가하고 이름을 frmClient로 정합니다.

폼의 캡션을 TCP 클라이언트로 변경합니다.

폼에 Winsock 컨트롤을 추가하고 그 이름을 tcpClient로 정합니다.

frmClient에 두 개의 TextBox 컨트롤을 추가합니다. 첫째 컨트롤의 이름은 txtSend, 그리고 둘째 컨트롤의 이름은 txtOutput로 정합니다.

폼에 CommandButton 컨트롤을 만들고 그 이름을 cmdConnect로 정합니다.

CommandButton 컨트롤의 캡션을 연결로 바꿉니다.

아래 코드를 폼에 추가합니다.

 

중요   RemoteHost 속성의 값을 사용자 컴퓨터에 친숙한 이름으로 꼭 바꾸어야 합니다.

 

Private Sub Form_Load()

   ' Winsock 컨트롤의 이름은 tcpClient입니다.

   ' 메모: 원격 호스트를 지정하려면 IP 주소나(: "121.111.1.1") 컴퓨터의 "친숙한" _

이름을 사용할 수 있습니다, 여기에 보여지는 것과 같습니다.

   tcpClient.RemoteHost = "RemoteComputerName"

   tcpClient.RemotePort = 1001

End Sub

 

Private Sub cmdConnect_Click()

   ' Connect 메서드를 불러와서 연결을 시작합니다.

   tcpClient.Connect

End Sub

 

Private Sub txtSendData_Change()

   tcpClient.SendData txtSend.Text

End Sub

 

Private Sub tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

  tcpClient.GetData strData

  txtOutput.Text = strData

End Sub

 

위의 코드는 간단한 클라이언트-서버 응용 프로그램을 만듭니다. 이 둘을 함께 사용하려면 해당 프로젝트를 실행하고 [연결]을 누릅니다. 그런 다음 한 폼의 txtSendData 입력란에 텍스트를 입력하면 다른 폼의 txtOutput 입력란에 같은 텍스트가 나타납니다.

 

하나 이상의 연결 요청 적용

위에 설명된 기본 서버는 하나의 연결 요청만 받아들입니다. 그러나 컨트롤 배열을 만들어서 같은 컨트롤을 사용하는 여러 개의 연결 요청을 받아들일 수 있습니다. 이런 경우 연결을 종료할 필요 없이 Index 속성을 설정하여 컨트롤의 새 인스턴스를 만들고 새 인스턴스에서 Accept 메서드를 불러냅니다.

아래 코드는 폼에 sckServer로 명명된 Winsock 컨트롤이 있고 그 Index 속성이 0으로 설정되어 있는 것으로 가정합니다. 그러므로 그 컨트롤은 컨트롤 배열의 부분입니다. 선언 영역에서 모듈 수준 변수 intMax가 선언됩니다. 폼의 Load 이벤트에서 intMax 0으로 설정되고 배열에 있는 첫째 컨트롤의 LocalPort 속성이 1001로 설정됩니다. 그리고 나면 컨트롤에 "응답" 컨트롤을 작성하는 Listen 메서드를 불러옵니다. 각 연결 요청이 도착하면 코드는 인덱스가 0("응답" 컨트롤의 값)인지를 확인하기 위해 테스트를 합니다. 인덱스가 0이면 응답 컨트롤은 intMax가 증가하고 그 수를 새 컨트롤 인스턴스를 작성하는 데 사용합니다. 이 새 컨트롤 인스턴스는 연결 요청을 받아들이는 데 사용됩니다.

 

Private intMax As Long

 

Private Sub Form_Load()

   intMax = 0

   sckServer(0).LocalPort = 1001

   sckServer(0).Listen

End Sub

 

Private Sub sckServer_ConnectionRequest _

(Index As Integer, ByVal requestID As Long)

   If Index = 0 Then

      intMax = intMax + 1

      Load sckServer(intMax)

      sckServer(intMax).LocalPort = 0

      sckServer(intMax).Accept requestID

      Load txtData(intMax)

   End If

End Sub

 

 

주요 속성

1. BytesReceived 속성 

받은(현재 수신 버퍼에 있는) 데이터의 양을 반환합니다. GetData 메서드를 사용하여 데이터를 검색합니다.

읽기 전용이며 디자인 모드에서는 사용할 수 없습니다

 

2. State 속성(Winsock 컨트롤)

컨트롤의 상태를 열거 형식으로 반환합니다. 읽기 전용이며 디자인 모드에서는 사용할 수 없습니다.

구문

object.State

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

Integer

설정

State 속성에 대한 설정은 다음과 같습니다.

상수

설명

sckClosed

0

기본 값. 닫혀 있음

sckOpen

1

열려 있음

sckListening

2

수신 대기 중

sckConnectionPending

3

연결 보류 중

sckResolvingHost

4

호스트 고정 중

sckHostResolved

5

호스트 고정 완료

sckConnecting

6

연결 중

sckConnected

7

연결 완료

sckClosing

8

피어가 연결을 닫고 있음

sckError

9

오류

 

3. RemoteHostIP 속성

원격 컴퓨터의 IP 주소를 반환합니다.

  • 클라이언트 응용 프로그램에서는, Connect 메서드로 연결이 이루어진 후 원격 컴퓨터의 IP 문자열이 이 속성에 포함됩니다.
  • 서버 응용 프로그램에서는 연결 요청(ConnectionRequest 이벤트)이 들어온 뒤 연결을 시작한 원격 컴퓨터의 IP 문자열이 이 속성에 포함됩니다.
  • UDP 프로토콜을 사용할 때는 DataArrival 이벤트가 발생한 후에 UDP 데이터를 보내는 컴퓨터의 IP 주소가 이 속성에 포함됩니다.

구문

object.RemoteHostIP

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

string

 

4. LocalIP 속성

지역 컴퓨터의 IP 주소를 IP 주소 점선 유형(xxx.xxx.xxx.xxx)으로 반환합니다. 읽기 전용이며 디자인 모드에서는 사용할 수 없습니다.

구문

object.LocalIP

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

문자열

 

5. Protocol 속성(Winsock 컨트롤)

Winsock 컨트롤에서 사용되는 TCP 또는 UDP 프로토콜을 설정하거나 반환합니다.

구문

object.Protocol [=protocol]

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

설정

protocol 설정은 다음과 같습니다.

상수

설명

sckTCPProtocol

0

기본값. TCP 프로토콜

sckUDPProtocol

1

UDP 프로토콜

 

참고

이 속성을 재설정하기 전에 Close 메서드를 사용하여 컨트롤을 반드시 닫아야 합니다.

 

주요 메소드

1. Accept 메서드

TCP 서버 응용 프로그램에서만 사용됩니다. 이 메서드는 ConnectionRequest 이벤트를 처리할 때 들어오는 연결을 받기 위해 사용됩니다.

구문

object.Accept requestID

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

데이터 형식

Long

참고

Accept 메서드는 ConnectionRequest 이벤트에서 사용됩니다. ConnectionRequest 이벤트는 Accept 메서드로 전달되어야 하는 대응 인수, RequestID 매개 변수를 가지고 있습니다. 다음은 그 예제입니다.

Private Sub Winsock1_ConnectionRequest _
(ByVal requestID As Long)
   ' State 속성을 검사하여 연결이 현재 열려 있으면
   ' 연결을 닫습니다.
   If Winsock1.State <> sckClosed Then Winsock1.Close
   ' requestID 매개 변수 값을 Accept 메서드에 전달합니다.
   Winsock1.Accept requestID
End Sub

 Accept 메서드는 수신 대기 상태가 아닌 새 컨트롤 인스턴스에 사용해야 합니다.

 

2. Bind 메서드

TCP 연결에 사용되는 LocalPort LocalIP를 지정합니다. 여러 프로토콜 어댑터가 있을 경우에 이 메서드를 사용합니다.

구문

object.Bind LocalPort, LocalIP

Bind 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

Object

적용 대상 목록에 있는 개체로 평가되는 개체식

LocalPort

연결할 때 사용된 포트

LocalIP

연결할 때 사용된 지역 인터넷 주소

 

참고

Listen 메서드를 호출하기 전에 Bind 메서드를 호출해야 합니다.

 

3. Close 메서드(Winsock 컨트롤)

클라이언트와 서버 응용 프로그램에 모두 사용되는 TCP 연결 또는 수신 대기 소켓을 닫습니다.

 

4. GetData 메서드(Winsock 컨트롤)

현재 데이터 블록을 검색하여 variant 형식 변수에 저장합니다.

반환값

Void

구문

object.GetData data, [type,] [maxLen]

GetData 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

Object

적용 대상 목록에 있는 개체로 평가되는 개체식

data

메서드가 성공적으로 반환된 후에 검색 데이터가 저장될 장소. 요구된 형식에 사용 가능한 데이터가 충분히 없으면 data Empty로 설정됩니다.

Type

선택적. 설정에 나타난 것 같이 검색될 데이터 형식

MaxLen

선택적. 바이트 배열이나 문자열을 받을 때 원하는 길이를 지정합니다. 바이트 배열이나 문자열에 이 인수를 생략하면, 사용 가능한 모든 데이터가 검색됩니다. 바이트 배열이나 문자열이 아닌 데이터에 이 인수를 설정하면 무시됩니다.

 

설정

type 설정은 다음과 같습니다.

설명

상수

Byte

vbByte

Integer

vbInteger

Long

vbLong

Single

vbSingle

Double

vbDouble

Currency

vbCurrency

Date

vbDate

Boolean

vbBoolean

SCODE

vbError

String

vbString

Byte Array

vbArray + vbByte

 

참고

DataArrival 이벤트에는 totalBytes 인수를 가진 GetData 메서드를 사용하는 것이 일반적입니다. maxlentotalBytes 인수보다 적게 지정하면 남은 바이트는 분실된다는 10040 경고 메시지를 받게 됩니다.

 

5. Listen 메서드

소켓을 만들어 수신 모드로 설정합니다. 이 메서드는 TCP 연결에서만 작동합니다.

구문

object.Listen

object 자리 표시자는 적용 대상 목록에 있는 개체로 평가되는 개체식

참고

ConnectionRequest 이벤트는 연결 요청이 들어왔을 때 발생합니다. ConnectionRequest를 처리할 때 응용 프로그램은(새 컨트롤 인스턴스에) Accept 메서드를 사용하여 연결을 받아들여야 합니다.

 

6. PeekData 메서드

GetData와 유사하지만 PeekData는 입력 대기열에서 데이터를 삭제하지 않습니다. 이 메서드는 TCP 연결에서만 작동합니다.

구문

object.PeekData data, [type,] [maxLen]

PeekData 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

data

메서드가 성공적으로 반환된 다음 검색된 데이터를 저장합니다. 요구한 형식으로 사용할 수 있는 데이터가 없으면 data Empty로 설정됩니다.

Type

선택. 설정에 설명된 것과 같이 검색되는 데이터의 형식. 기본값: vbArray + vbByte.

maxLen

선택. 바이트 배열이나 문자열을 받을 때 원하는 길이를 지정합니다. 바이트 배열이나 문자열에 대해 이 인수를 생략하면 사용할 수 있는 모든 데이터가 검색됩니다. 바이트 배열이나 문자열이 아닌 데이터 형식에 이 인수를 설정하면 무시됩니다.

 

설정

type 설정은 다음과 같습니다.

형식

상수

Byte

vbByte

Integer

vbInteger

Long

vbLong

Single

vbSingle

Double

vbDouble

Currency

vbCurrency

Date

vbDate

Boolean

vbBoolean

SCODE

vbError

String

vbString

Byte Array

vbArray + vbByte

 

참고

형식이 vbString으로 지정되면 문자열 데이터는 사용자에게 반환되기 전에 UNICODE로 전환됩니다.

 

7. SendData 메서드

원격 컴퓨터에 데이터를 보냅니다.

구문

object.SendData data

SendData 메서드 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

data

보낼 데이터. 이진 데이터에는 바이트 배열이 사용되어야 합니다.

 

참고

UNICODE 문자열이 전달되면 네트워크로 보내기 전에 ANSI 문자열로 전환됩니다.

 

주요 이벤트

1. Close 이벤트

원격 컴퓨터가 연결을 닫을 때 발생합니다. 응용 프로그램은 Close 메서드를 사용해야 TCP 연결을 올바르게 닫아야 합니다.

 

2. Connect 이벤트(Winsock 컨트롤)

Connect 작업이 완료되었을 때 발생합니다.

구문

object.Connect()

object 자리 표시자는 Winsock 컨트롤로 평가되는 개체식을 나타냅니다.

참고

Connect 이벤트를 사용하면 연결이 성공적으로 수행된 때가 언제인지 확인할 수 있습니다.

 

3. ConnectionRequest 이벤트

원격 컴퓨터가 연결을 요청할 때 발생합니다.

  • TCP 서버 응용 프로그램에서만 사용됩니다. 이 이벤트는 연결 요청이 들어올 때 발생합니다. 이벤트가 활성화된 후 클라이언트 정보가 RemoteHostIPRemotePort 속성에 저장됩니다.

구문

object_ConnectionRequest (requestID As Long)

ConnectionRequest 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는개체식.

requestID

들어오는 연결 요청 식별자. 이 인수는 둘째 컨트롤 인스턴스의 Accept 메서드에 전달되어야 합니다.

 

참고

서버는 연결을 받아들일지 여부를 결정할 수 있습니다. 들어오는 연결 요청이 거부되면 피어(클라이언트) Close 이벤트를 받게 됩니다. 새 컨트롤 인스턴스에 Accept 메서드를 사용하여 들어오는 연결을 받아들입니다.

 

4. DataArrival 이벤트

새 데이터가 도착할 때 발생합니다.

구문

object_DataArrival (bytesTotal As Long)

DataArrival 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

Object

적용 대상 목록에 있는 개체로 평가되는 개체식

bytesTotal

Long. 검색 가능한 데이터의 전체 길이

 

참고

한번의 GetData 호출로 모든 데이터를 검색해야 이 이벤트가 발생합니다. 새 데이터가 있을 때만 이벤트가 활성화됩니다. BytesReceived 속성을 사용하면 사용할 수 있는 데이터의 양을 언제든지 확인할 수 있습니다.

 

5. Error 이벤트 (Winsock 컨트롤)

배경 프로세스(예를 들면 연결 실패, 배경에서 보내기 또는 받기 실패 등)에서 오류가 발생할 때마다 발생합니다.

구문

object_Error(number As Integer, Description As String, Scode As Long, Source As String, HelpFile as String, HelpContext As Long, CancelDisplay As Boolean)

Error 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

number

오류 코드를 정의하는 정수. 상수는 아래 설정을 참조합니다.

description

오류 정보를 포함하는 문자열

Scode

long SCODE

Source

오류 원인을 설명하는 문자열

HelpFile

도움말 파일 이름을 포함하는 문자열

HelpContext

도움말 파일 구문

CancelDisplay

표시 취소 여부를 지정합니다. 기본 값은 False이며, 기본값 오류 메시지 상자를 표시하게 됩니다. 기본값 메시지 상자를 사용하지 않으려면 CancelDisplayTrue로 설정합니다.

 

설정

number 설정은 다음과 같습니다.

상수

설명

sckOutOfMemory

7

메모리가 부족합니다.

SckInvalidPropertyValue

380

속성값이 잘못되었습니다.

SckGetNotSupported

394

속성을 읽을 수 없습니다.

SckSetNotSupported

383

읽기 전용 속성입니다.

SckBadState

40006

요청한 트랜잭션이나 요청에 대한 프로토콜 또는 연결 상태가 잘못되었습니다.

SckInvalidArg

40014

함수에 전달된 인수의 유형 또는 지정 범위가 잘못되었습니다.

SckSuccess

40017

성공적으로 수행되었습니다.

SckUnsupported

40018

지원하지 않는 변수 형식입니다.

SckInvalidOp

40020

현재 상태에서 작업이 잘못되었습니다.

SckOutOfRange

40021

인수가 범위를 벗어났습니다.

SckWrongProtocol

40026

요청한 트랜잭션 또는 요청에 대한 프로토콜이 잘못되었습니다.

SckOpCanceled

1004

작업이 취소되었습니다.

SckInvalidArgument

10014

요청된 주소는 동시 전송 주소이지만 플래그가 설정되지 않았습니다.

SckWouldBlock

10035

블록화되지 않은 소켓입니다. 지정된 작업은 블록화되어 있습니다.

SckInProgress

10036

Winsock 블록화 작업이 진행 중입니다.

SckAlreadyComplete

10037

작업이 완료되었습니다. 진행 중인 블록화 작업이 없습니다.

SckNotSocket

10038

설명자가 소켓이 아닙니다.

SckMsgTooBig

10040

버퍼에 맞추기에는 데이터그램이 너무 커서 잘렸습니다.

SckPortNotSupported

10043

지정된 포트는 지원되지 않습니다.

SckAddressInUse

10048

사용 중인 주소입니다.

SckAddressNotAvailable

10049

지역 컴퓨터에서 사용 가능한 주소가 아닙니다.

SckNetworkSubsystemFailed

10050

네트워크 서브 시스템이 실패하였습니다.

SckNetworkUnreachable

10051

지금 이 호스트에서 네트워크 액세스를 할 수 없습니다.

SckNetReset

10052

SO_KEEPALIVE가 설정되었을 때 연결 시간이 초과되었습니다.

SckConnectAborted

11053

시간 초과 또는 다른 실패로 인하여 연결이 취소되었습니다.

SckConnectionReset

10054

원격 컴퓨터에 의해 연결이 재설정 되었습니다.

SckNoBufferSpace

10055

사용 가능한 버퍼 공간이 없습니다.

SckAlreadyConnected

10056

이미 연결된 소켓입니다.

SckNotConnected

10057

소켓이 연결되지 않았습니다.

SckSocketShutdown

10058

소켓이 종료되었습니다.

SckTimedout

10060

소켓이 종료되었습니다.

SckConnectionRefused

10061

연결이 강제로 거부되었습니다.

SckNotInitialized

10093

WinsockInit를 먼저 호출해야 합니다.

SckHostNotFound

11001

귄위있는 대답: 호스트 컴퓨터를 찾을 수 없습니다.

SckHostNotFoundTryAgain

11002

귄위없는 대답: 호스트 컴퓨터를 찾을 수 없습니다.

SckNonRecoverableError

11003

회복 불가능한 오류입니다.

SckNoData

11004

유효한 이름입니다. 요청한 형식의 데이터 레코드가 없습니다.

 

6. SendComplete 이벤트

전송 작업이 완료된 후에 발생합니다.

 

7. SendProgress 이벤트

데이터가 전송되는 중에 발생합니다.

구문

object_SendProgress (bytesSent As Long, bytesRemaining As Long)

SendProgress 이벤트 구문은 다음과 같은 구성 요소로 되어 있습니다.

구성 요소

설명

object

적용 대상 목록에 있는 개체로 평가되는 개체식

BytesSent

이 이벤트가 마지막으로 활성화된 이후 전송된 바이트 수

BytesRemaining

보내기 위해 전송 버퍼에 대기 중인 바이트 수