수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693842
  • Today | 193
  • Yesterday | 588

Programming/PHP2006/01/26 12:15

PHP 네트워크 프로그래밍 - 3

신현삼 (sami@digitalonnet.com)

소켓 통신 프로그래밍하기
네트워크 프로그래밍의 가장 기초이자 핵심이 되는 것은 TCP/IP와 UDP라고 해도 과언이 아닐 것이다. 실제로 프로젝트에서 가장 많이 사용되는 프로그래밍 인터페이스가 TCP와 UDP이다. TCP나 UDP는 타 서버와의 연동할 때 유용하게 쓰인다. 서버의 정보를 가져올 때나 서버와 서버 사이에 정보를 교환할 때 사용한다. 실제로 프로젝트에서 쓰이는 예제를 한번 살펴보자. 해당 예제 코드는 특정 서비스를 진행하는 서버로 소켓을 보내서 해당 정보를 받아서 패킷을 처리하는 방식이다.


$socket=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);

$remote_port=시스템포트;

$remote_host=“시스템아이피‘;


$kkk = socket_connect($socket,$remote_host,$remote_port);


$send_data="보낼데이터";

socket_send ($socket, $send_data, strlen($send_data), 0);

socket_recv($socket, $yyyy,4000,0)

echo("$yyyy");

?>


이 예제는 UDP 소켓을 이용하여 정보를 주고받는 것으로 socket_create() 함수로 소켓을 생성하고, socket_connect()으로 해당 서버와의 연결을 시도한다(socket_create() 함수에서 SOCK_DGRAM 파라미터는 비연결성 지향인 UDP를 위해서 설정해 준다. TCP라면 SOCK_STREAM 파라미터를 사용해야 한다). socket_send() 함수와 socket_recv() 함수를 이용해서 서버와 통신을 해서 해당 서버의 정보를 가져오는 방법이다. 코드는 아주 간결하게 보이나 유의해야 할 점이 있다. 만일 PHP 버전이 4.2.3 이전 버전이라면 socket_recv() 함수에서 오류가 날 것이다. 다음은 4.2.3의 news.txt에 나와 있는 변경안이다.

06 Sep 2002, Version 4.2.3

Modified socket_recv() behavior. [$r=socket_recv($sock, $buf, $len, $flags)]


이전의 socket_recv() 함수가 변경되었다는 말이다. 이전의 socket_recv() 함수를 살펴보면 파라미터가 하나 더 작다. 실제 PHP 엔진이 업그레이드될수록 소켓 함수에 대한 변동이 잦아지는데 매뉴얼을 살펴보아도 실험적인 함수임을 표기해놓고 있다. 자신의 PHP 엔진과 변경사항을 잘 구분하여 프로그래밍에 임하길 바란다. 다음과 같은 경고 화면을 볼 수 있을 것이다.

Warning : This function is EXPERIMENTAL. The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.
Warning : This function is currently not documented; only the argument list is available.


또한 소켓 프로그래밍에서 빼서는 안될 부분이 바로 에러 핸들링이다. 소켓통신은 연결을 기본으로 진행되는 것이 때문에(물론 UDP는 비연결지향이다) 대상 서버의 상태를 잘 파악해야 한다. 대상 서버의 상태를 살펴볼 수 있는 오류의 사항은 두 가지로 나눌 수 있다.

ꊱ 해당 서버는 기동되어 있으나 통신을 처리해 주는 프로세스(통신 프로그램)가 장애나 기동되지 않았을 때
ꊲ 해당 서버 자체가 장애나 기동되지 않았을 때

만일 앞의 UDP 코드에서 서버가 다운된 상황이라면 socket_send()를 호출해 대상 서버로 데이터를 보내고 나서(여기까지는 오류가 나지 않는다. UDP는 비연결 지향이기 때문이다) socket_recv() 함수에서 다음과 같은 오류가 나타날 것이다.

Warning: socket_recv() unable to read from socket [0]:
작업을 완료했습니다.
in c:serversocket.php on line 24


이것은 실제로 socket_send()로 보냈지만 아무런 결과를 받지 못했을 때 나는 오류이다. 앞의 서버 상태일 때 나타날 수 있는 오류라고 할 수 있겠다. 이런 문제가 빈번하게 발생할 수 있기 때문에 반드시 개발자는 에러 핸들링에 대한 설계를 진행해야 한다. 앞과 같은 UDP 코드라면 2가지의 오류를 고려한 에러 핸들링을 추가하면 될 것이다.


if(!@socket_recv($socket, $yyyy,4000,0) )

{

echo("

서버에 접속되지 않거나 프로그램이 동작하지 않습니다.");

exit;

}

?>
"PHP" 카테고리의 다른 글
  • PHP Framework (0)2007/12/07
  • PHP 최적화하기 - 2 (0)2006/01/26
  • PHP 최적화하기 - 1 (0)2006/01/26
  • PHP 네트워크 프로그래밍 - 3 (0)2006/01/26
  • PHP 네트워크 프로그래밍 - 1 (0)2006/01/26
2006/01/26 12:15 2006/01/26 12:15
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1672

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 1508 1509 1510 1511 1512 1513 1514 1515 1516 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • WaitCursor
  • 블로그플러스
  • Interface
  • 컨디션
  • Text
  • PE
  • Solar PHP
  • 제이콥스 그레나쉬
  • DSS
  • 감성정보
  • warning 제거
  • 가속키
  • 컴퓨터과학과
  • Gimp
  • 강원대학 교기
  • 빠에야
  • Virtual Memory
  • Traffic
  • 웹 2.0
  • 디스크 복사

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.