Пример простого сервера на Python под Unix

Простой сервер, который запускается на 5000 порту, принимает данные и выводит дамп данных. Скопируйте исходный код сервера. Запустите с помощью

python server.py

и присоединитесь с помощью

telnet 127.0.0.1 5000

Попробуйте ввести данные и посмотреть на результат работы сервера. :)


#encoding:utf8
#!/usr/bin/python

import socket
import sys

FILTER=''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)])

def dump(src, length=8):
    """
    Функция отображающая дамп данных
    """
    N=0; result=''
    while src:
       s,src = src[:length],src[length:]
       hexa = ' '.join(["%02X"%ord(x) for x in s])
       s = s.translate(FILTER)
       result += "%04X   %-*s   %s\n" % (N, length*3, hexa, s)
       N+=length
    return result

host = ''    # ip
port = 5000  # порт
backlog = 5  # ожидаемое количество ожидающих обработки запросов
size = 1024  # размер данных

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)       # создаём сокет для IPv4
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # устанавливаем опцию повторного использования порта для того, чтобы не ждать после останова сервера пока освободится порт
s.bind((host,port))  # ассоциировать адрес с сокетом
s.listen(backlog)    # принимать запросы на установление соединения

"""
После вызова функции listen() указанный сокет будет использоваться для приема запросов на соединение.
"""
while 1:
    client, address = s.accept() # принять запрос и преобразовать в соединение. client - новое соединение
    print "server: got connection from %s port %d\n" % (address[0], address[1])
    client.send("Welcome to server\n") # посылаем приглашение клиенту
    data = client.recv(size) # получаем данные от клиента с размером size=1024
    while(len(data) > 0):
      if "quit" in data: break; # если клиент вводит quit, то соединение с клиентом закрывается
      print "RECV: %d bytes\n" % len(data)
      print dump(data)
      data = client.recv(size)

    client.close() # Закрыть соединение с клиентом

Небольшое руководство на английском http://ilab.cs.byu.edu/python/

Логин Регистрация

Логин

Облако тэгов

count count all django django admin feedparser libxml2dom linux mysql parser payway python pyunit pyvkapi qiwi return sniffer sockets ssh ssh tunnel sublime text tdd tehtv templatetags ubuntu unittest webmoney X11 аргументы биллинг видео видеоурок видео уроки вконтакте возврат диаграмма диаграмма стека заметки инструкция комментарии композиция логические операторы мышка образование обучение операторы параметры функции парсинг переменная переменные питон платежи поток выполнения преобразование типов программирование проекты процессинг разработка разработкаразработка рекурсия сеть скрипт сниффер сокеты стек стоки тестирование тип тип данных типы урок уроки условия функция
free counters