Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 09 Февраль, 2012, 09:06:38

Страниц: [1] 2 3 4
Печать
Автор Тема: Сокеты. клиент-сервер  (Прочитано 4188 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mr.Pihto    ↓ 
22 Ноябрь, 2009, 04:09:03
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

решил написать клиент-сервер на питоне. Однако меньше писанины получилось чем на C++
 
клиент
Python

import socket
while 1:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(("127.0.0.1", 7500))
    buf = raw_input('->Server ')
    sock.send(buf)
    result = sock.recv(1024)
    print "Server: ", result
    sock.close()
 

сервер
Python

import socket, threading
class MyThread(threading.Thread):
    def __init__(self, sock, addr):
        self.sock = sock
        self.addr = addr
        threading.Thread.__init__(self)
    def run ( self ):
        buf = self.sock.recv(1024)
        print "Client: ", buf
        self.sock.send(buf)
        self.sock.close()
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.bind(("127.0.0.1", 7500))
srv.listen(5)
while 1:
    sock, addr = srv.accept()
    MyThread(sock,addr).start()
 

но тут есть какаято трабла.. например при дисконекте клиента сервер какуюто ошибку пишет.
завтра попробую разобраться
Спустя 1 минуту добавил
зы сервер как вы можете заметить много поточный:)
а изза этого собственно и трабла.. завтра...
Спустя 24 секунды добавил
ну уже точнее сёдня)
Записан
adw0rd    ↓ 
22 Ноябрь, 2009, 11:02:02 , спустя 6 часов 52 минуты 59 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: Санитары

Карма: не нужна
Сообщений: 17221
Сила слова: 1.65

крут )
Записан

FreeBSD, Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch
Кинсбург * Либург * Футбург * Мой блог
phpdude    ↓ 
22 Ноябрь, 2009, 11:24:35 , спустя 22 минуты 33 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: 19712
Сила слова: 1.72

ну нормальная обработка дисконнектов - дело тонкое :)
 
пока на грабли 100 раз не наступишь в этом деле, не поймешь :)
Спустя 17 секунд добавил
вот клиентский сокет всегда знает что его отбросило а серверный ... не всегда)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Mr.Pihto    ↓ 
22 Ноябрь, 2009, 12:17:15 , спустя 52 минуты 40 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

да точно. код ошибки 10054 - WSACONNECTRESET - Connection reset by peer
Записан
Mr.Pihto    ↓ 
22 Ноябрь, 2009, 01:02:30 , спустя 45 минут 15 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

вот сделал. по команде exit со стороны сервера клозится сокет ну и поток завершается. да и вообще теперь все более правильно, т.к. в примере выше на каждую мессагу создаётся поток :) а тут создаётся поток на целую сессию месаг и в клиенте на каждую мессагу новый сокет был... а терь 1 на сессию
 
клиент
Python

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 7500))
while 1:
    buf = raw_input('->Server ')
    sock.send(buf)
    result = sock.recv(1024)
    print "Server: ", result
sock.close()
 

сервер
Python
import socket, threading
class MyThread(threading.Thread):
    def __init__(self, sock, addr):
        self.sock = sock
        self.addr = addr
        threading.Thread.__init__(self)
    def run ( self ):
        while 1:
            buf = self.sock.recv(1024)
            if buf=='exit':
                break
            print "Client: ", buf
            self.sock.send(buf)
        self.sock.close()
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.bind(("127.0.0.1", 7500))
srv.listen(5)
while 1:
    sock, addr = srv.accept()
    MyThread(sock,addr).start()
 
Записан
phpdude    ↓ 
22 Ноябрь, 2009, 01:28:10 , спустя 25 минут 40 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: 19712
Сила слова: 1.72

ужас)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Troy    ↓ 
22 Ноябрь, 2009, 01:39:26 , спустя 11 минут 16 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 43
Сообщений: 2254
Сила слова: 1.91

phpdude, напиши ему на C#, пусть знает что такое красивый язык))
Записан

Mr.Pihto    ↓ 
22 Ноябрь, 2009, 01:48:03 , спустя 8 минут 37 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

на этом красивом языке раза в 2 больше кода получится)
Записан
phpdude    ↓ 
22 Ноябрь, 2009, 01:48:19 , спустя 16 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: 19712
Сила слова: 1.72


на этом красивом языке раза в 2 больше кода получится)
колво не главный показатель
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
CTAPbIu_MABP    ↓ 
22 Ноябрь, 2009, 01:48:58 , спустя 39 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5184
Сила слова: 1.81

помоему ты перемудрил с while 1
хоть бы там задержка какая была чтоли...
Записан

java.lang.OutOfMemoryError
phpdude    ↓ 
22 Ноябрь, 2009, 01:52:10 , спустя 3 минуты 12 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: д-о-х-у-я!
Сила слова: 1.72


помоему ты перемудрил с while 1
хоть бы там задержка какая была чтоли...
задержку создает srv.accept()
 
это подвешивает основной процесс до коннекта :)
 
так всегда пишется, ну только с одним условием
 
while(!this.disconnecting)
{
   client = sock.accept();
}
 
чтобы при состоянии дропа соединений и закрытия сокета как бы не создавать дополнительных ошибок :)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
CTAPbIu_MABP    ↓ 
22 Ноябрь, 2009, 02:04:38 , спустя 12 минут 28 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5184
Сила слова: 1.81

ништяк, осталось смирится с табами и можно изучать
Записан

java.lang.OutOfMemoryError
Mr.Pihto    ↓ 
22 Ноябрь, 2009, 02:23:17 , спустя 18 минут 39 секунд
НЕ ХУЕТА! ХУЕТА!
не выябывайся
Группа: Адекваты

Карма: 17
Сообщений: 1398
Сила слова: 1.22

я на телефон клиент скинул... прикольно :) только raw_input не работает почему то.. хотя из интерактивной консоли работает.. вобще я просто сделал так чтоб мессага слалась.. все работает )
Спустя 1 минуту 51 секунду добавил
только сервер на C++ юзал ибо сервер на питоне чет не открывает порты :(
всмысле в роутере они открыты но когда чекаеш их то только под нагрузкой пишет что открыты.. так вот под С== сервером открыты а под питоном нет.. странно
Записан
Troy    ↓ 
22 Ноябрь, 2009, 02:23:28 , спустя 11 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 43
Сообщений: 2254
Сила слова: 1.91

CTAPbIu_MABP, хм, явы уже мало ?
Записан

CTAPbIu_MABP    ↓ 
22 Ноябрь, 2009, 02:31:52 , спустя 8 минут 24 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5184
Сила слова: 1.81

Troy, знаний много не бывает
Записан

java.lang.OutOfMemoryError
Страниц: [1] 2 3 4
Печать
 

Перейти в: