Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2009 11:49:55

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевое программирование

есть сервер:

import socket


s=socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_IP)
s.bind(("localhost", 8080))
s.listen(1)

while 1:
print "waiting connection ..."
conn, addr=s.accept()
print "Connected" , addr
data=""
while 1:
req=conn.recv(1024)
if not req:
break
data+=req
conn.send("OK")
conn.close()
print data
и к нему клиент
import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 8080))
s.send("some data")
data=""
while 1:
req=s.recv(1)
if not req:
break
s.close()
когда запускается клиент, то он виснет и скорее всего ждет данные, при этом сервер не выполняет break и не передохит с получения на отправку данных.


вчера целый вечер бился - не могу понять в чем проблема.


спасибо



Отредактировано (Ноя. 12, 2009 11:51:09)

Офлайн

#2 Ноя. 12, 2009 13:35:27

k0sh
От:
Зарегистрирован: 2009-10-08
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевое программирование

Условие “if not req:” произойдет только в случае обрыва соединения, а до тех пор оба (клиент, сервер) будут ждать данных.



Офлайн

#3 Ноя. 12, 2009 14:17:19

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевое программирование

k0sh
Условие “if not req:” произойдет только в случае обрыва соединения, а до тех пор оба (клиент, сервер) будут ждать данных.
а как правильно осуществить подобную передачу данных?



Офлайн

#4 Ноя. 12, 2009 15:00:02

k0sh
От:
Зарегистрирован: 2009-10-08
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевое программирование

Определиться с протоколом обмена, например если сервер/клиент получает магическую команду (например “BYE”) завершать сессию.



Офлайн

#5 Ноя. 12, 2009 17:31:13

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

сетевое программирование

можете подсказать пример хорошего, понятного кода? желательно ссылку :)
спасибо



Офлайн

#6 Ноя. 13, 2009 13:31:24

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

сетевое программирование

попробуй вместо s.bind((“localhost”, 8080)), написать s.bind((“”, 8080))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version