Начни с вот этого:
http://ln.com.ua/~openxs/articles/smart-questions-ru.htmlУзнаешь много интересного и найдёшь свои ошибки...
Итак. Решил немного отвлечься от своих дел и помочь.
Вот сервер.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
PORT = 12321 # Порт соединения.
import socket
from thread import start_new_thread
from StringIO import StringIO
# Статистика. Можно организовать класс, эмулирующий словарь, но пишущий в СУБД.
Stat = {} # {Ip: [КоличествоСоединений, КоличествоДанных], ...}
def thread(Socket, (Ip, _)):
'''Нить клиента.'''
Socket.settimeout(0.13) # Установка времени блокировки для чтения сокета. См. предыдущий пост в этом форуме.
IO = StringIO() # Данные, переданные клиентом.
while True:
try:
IO.write(Socket.recv(1)) # Читаем данные из сокета и пишем их в IO.
except socket.timeout: # Таймаут закончился.
pass # Здесь можно обработать пришедшие данные.
except socket.error: # Ошибка а сокете.
break # Выход из цикла чтения.
# Сохраняем данные в статистике.
s = Stat.setdefault(Ip, [0, 0])
s[0] += 1
s[1] += len(IO)
# Инициализация сокета.
S = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
S.bind(("localhost", PORT))
S.listen(1)
while True:
start_new_thread(thread, (S.accept(), )) # Создиние нити клиента.
Во-первых, он многопоточный, т.е. если разбирёшься, то хорошая оценка обеспечена.
Во-вторых, он ничего никуда не пишет (это я оставлю тебе).
В-третьих, я его не тэстировал (в теории всё должно быть Ok, но если где буквой ошибся -- прости).
Last edited April 27, 2008, 4:50 a.m.
...так кто ж ты, наконец?
-- Я -- часть той силы, что вечно хочет зла
и вечно совершает благо.