Форум сайта python.su
у меня есть две программки - одна сервер, а вторая - клиент, я хочу чтобы от клиента сообщение передавалось сообщение серверу!
у меня первое сообщение передается( а вот на втором вылетает( подскажите пожалуйста, что я не так делаю?
собственно код клиента:
import socket
HOST = ‘127.0.0.1’
PORT = 50033
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
message = getMessage()
key = getKey()
data = getTranslatedMessage(message, key)
s.send(data)
print 'Send: ‘, data
data = s.recv(8192)
s.close()
print ’Received: ', data
первое сообщение идеально отправляется, а вот на втором выводит ошибку:
Traceback (most recent call last):
File “C:\Users\Katusha\Desktop\Kate\Kate\task3\easy_client.py”, line 50, in <module>
s.send(data)
error:
Отредактировано (Дек. 3, 2011 17:44:03)
Офлайн
Надо попробовать вынести из цикла
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Офлайн
а это дело ъ на стороне клиента? или может на сервере что-то криво написано?
Отредактировано (Дек. 3, 2011 19:05:56)
Офлайн
при переносе тоже ошибка(причем теперь не отправляется ни одно сообщение
Traceback (most recent call last):
File “C:\Users\Katusha\Desktop\Kate\Kate\task3\easy_client.py”, line 44, in <module>
s.connect((HOST, PORT))
File “C:\Python27\lib\socket.py”, line 224, in meth
return getattr(self._sock,name)(*args)
File “C:\Python27\lib\socket.py”, line 170, in _dummy
raise error(EBADF, ‘Bad file descriptor’)
error: Bad file descriptor
а если перетащить за цикл с s.connect
то пишет -
Traceback (most recent call last):
File “C:\Users\Katusha\Desktop\Kate\Kate\task3\easy_client.py”, line 44, in <module>
s.connect((HOST, PORT))
File “C:\Python27\lib\socket.py”, line 224, in meth
return getattr(self._sock,name)(*args)
File “C:\Python27\lib\socket.py”, line 170, in _dummy
raise error(EBADF, ‘Bad file descriptor’)
error: Bad file descriptor
сообщение ввести предлагает( но увы оно даже не отсылается( а в моем варианте одно проходило идеально
Отредактировано (Дек. 3, 2011 19:03:24)
Офлайн
надо строки, создающие соединение, вынести из цикла
цикл сделать конечным
соединение в цикле не закрывать
Отредактировано (Дек. 3, 2011 23:06:44)
Офлайн
здорого =) работает! только у меня не получилось его сделать конечным, а вот с while 1 все заработало) спасибо! я все строки вносила и выносила из цикла - а тупо про закрытие сессии не подумала!
Отредактировано (Дек. 3, 2011 23:55:25)
Офлайн
while True - плохой стиль (бесконечная программа)
надо определить, когда она закончится, и написать соответствующее условие
например, посылает десять сообщений
Офлайн