Python ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¿Ö ?

Àͼ÷ÇÑ C/C++ ´ë½Å Python ¾ð¾î¸¦ ¼±ÅÃÇÑ ÀÌÀ¯°¡ ±Ã±ÝÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù. »ç½Ç ±×·¸±âµµ ÇÕ´Ï´Ù. C/C++·Î °£´ÜÇϰÔ? ±¸ÇöÇÒ ¼ö Àִµ¥, ±»ÀÌ PythonÀ̶ó´Â »õ·Î¿î ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ ±¸ÇöÇÏ·Á´ÂÁö ¸»ÀÔ´Ï´Ù.

Áö±Ý±îÁö Á¦°¡ ¸Ã¾Ò´ø ¾÷¹«µéÀÇ »ó´ç¼ö°¡ ½Ã½ºÅÛ/³×Æ®¿öÅ© ±âŸ ·Î±×¸¦ ¼öÁýÇØ¼­ ºÐ¼®ÇÏ´Â ÇÁ·Î±×·¥ÀÇ °³¹ßÀ̾ú½À´Ï´Ù. º¸¾È°üÁ¦½Ã½ºÅÛ, IDC ½Ã½ºÅÛ/³×Æ®¿öÅ© °ü¸® ÇÁ·Î±×·¥, QA, QOSȰµ¿ µîµî. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥µéÀº ´Ù¾çÇÑ ¿î¿µÃ¼Á¦·Î ÀÌ·ç¾îÁø ºÐ»êȯ°æ¿¡¼­ ÀÛµ¿ÇØ¾ß Çϴ Ư¡À» °¡Áö°í ÀÖ½À´Ï´Ù. À̸¦Å×¸é ºÐ»ê ¸ð´ÏÅ͸µ ½Ã½ºÅÛ °°Àº °ÍÀÇ ±¸ÃàÀä. C¿Í C++·Î ¸¸µé °æ¿ì ¸ñÇ¥ ¿î¿µÃ¼Á¦¿¡´ëÇØ¼­ ÄÄÆÄÀÏ µÇ¾ß ÇѴٴ Ư¼ºÀÌ ¹®Á¦¿´½À´Ï´Ù. ¹èÆ÷°¡ ¾î·Æ´Ù´Â °ÅÁÒ.

±×·¡¼­ Python ¾ð¾î¸¦ »ç¿ëÇϱâ·Î Çß½À´Ï´Ù. ¿î¿µÃ¼Á¦¿¡ °ü°è¾øÀÌ ½ÇÇàµÈ´Ù´Â Ư¡ÀÌ ¸¶À½¿¡ µç°ÅÁÒ.

Python & BSD Socket

´Ù¸¥ °í±Þ ¾ð¾îµéÀÌ ±×·¸µíÀÌ Pythonµµ ¾Æ¸¶ °í¼öÁØÀÇ ³×Æ®¿öÅ© ¸ðµâÀ» °¡Áö°í ÀÖÀ»°Å¶ó°í »ý°¢ÀÌ µË´Ï´Ù¸¸... Low LevelÀÇ ³×Æ®¿öÅ© ÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸±â·Î Çß½À´Ï´Ù. BSD Socket ÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏ´ÂÁö ¾Ë¾Æº¸°Ú´Ù´Â °ÅÁÒ. ´ç¿¬È÷ BSD Socket ÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇϰí ÀÖ´õ±º¿ä.

Python BSD Socket ÀÎÅÍÆäÀ̽º¸¦ Á¤¸®ÇÏÁö ¾Ê°Ú½À´Ï´Ù. BSD SocketÀ» ¾Ë°í ÀÖ´Ù¸é, ±×´ë·Î »ç¿ëÇÏ¸é µÇ´Ï±î¿ä.

echo server

±×³É °£´ÜÇÏ°Ô Thread±â¹ÝÀÇ echo server¸¦ Çϳª ¸¸µé¾î º¸±â·Î Çß½À´Ï´Ù. ÀÌ ¹®¼­´Â pythonÀ» °øºÎÇϸ鼭 ÀÛ¼ºÇÑ °Ì´Ï´Ù. ±×·¯´Ï °í±Þ½º·± Python Äڵ带 ±â´ëÇÏÁö´Â ¸¶½Ã±â ¹Ù¶ø´Ï´Ù.

¼ÒÄÏ Å¬·¡½º¿Í ¾²·¹µå Ŭ·¡½º¸¦ Á¤ÀÇÇß½À´Ï´Ù. ÆÄÀÏÀ̸§Àº ydsocket.pyÀÔ´Ï´Ù.
# -*- coding: utf-8 -*- 
import socket 
import sys 
import os 
import time 
from threading import Thread 
 
BACKLOG = 5 
 
# Socket Ŭ·¡½º 
class YDSocket: 
  def __init__(self): 
    listensock = 0; 
  # Bind ÇÔ¼ö 
  def Bind(self,port): 
    # socketÀÌ À̸§À¸·Î ºÙ´Â´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â 
    # BSD Socket ÇÔ¼ö¿Í µ¿ÀÏÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.  
    self.listensock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    self.listensock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1); 
    self.listensock.bind(('127.0.0.1', port)) 
    self.listensock.listen(BACKLOG) 
  # Accept ÇÔ¼ö 
  def Accept(self): 
    conn, addr = self.listensock.accept(); 
    print "Accept OK : ", addr 
    return conn 
 
# ½º·¹µå Ŭ·¡½º 
class JobThread(Thread): 
  def __init__ (self, conn): 
    Thread.__init__(self) 
    self.conn = conn 
    self.method = {"quit": self.func_quit} 
  def run(self): 
    while 1: 
      read = self.conn.recv(1024) 
      if read == '': 
        print "Client Close" 
        self.conn.close(); 
        return 
      else : 
        stripstr = read.rstrip('\r\n') 
        if stripstr in self.method: 
          rtv = self.method.get(stripstr)() 
          if rtv == 0: 
            return 
        else : 
          self.conn.send(read) 
  # À¯Àú°¡ quit¸¦ ÀÔ·ÂÇßÀ» °æ¿ì Á¾·áÇÑ´Ù. 
  def func_quit(self): 
    print "Client Close" 
    self.conn.close(); 
    return 0; 
 

´ÙÀ½Àº echo server ÀÔ´Ï´Ù. À̸§Àº echoserver.py·Î Çß½À´Ï´Ù.
#!/usr/bin/python 
from ydsocket import YDSocket, JobThread 
 
acceptor = YDSocket() 
acceptor.Bind(8080) 
while 1: 
  conn = acceptor.Accept() 
  myJob = JobThread(conn) 
  myJob.run() 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.